fix issue with expense budget

This commit is contained in:
ronozoro 2024-10-09 18:43:42 -07:00
parent 7656120a0b
commit fea8599f1c
No known key found for this signature in database
GPG Key ID: 7C2BDED35C62C0F3
4 changed files with 82 additions and 60 deletions

View File

@ -78,17 +78,26 @@ class CrossoveredBudgetLines(models.Model):
confirm = fields.Float(string='Confirm Amount', compute='_compute_confirm',
help=_('Total amount of confirmed purchase orders'))
@api.depends('analytic_account_id')
def _compute_confirm(self):
for rec in self:
orders = self.env['purchase.order.line'].search(
[('account_analytic_id', '=', rec.analytic_account_id.id),
('order_id.state', 'in', ['purchase','done'])]).mapped('order_id')
total_orders = sum(orders.mapped('amount_total'))
('order_id.state', 'in', ['purchase', 'done'])]).mapped('order_id')
orders_without_tax = sum(orders.mapped('amount_total')) - sum(orders.mapped('amount_tax'))
need_tax = 0
for line in orders.mapped('order_line'):
vals = line._prepare_compute_all_values()
taxes = line.taxes_id.filtered(lambda x: x.analytic).compute_all(
vals['price_unit'],
vals['currency_id'],
vals['product_qty'],
vals['product'],
vals['partner'])
need_tax += sum(t.get('amount', 0.0) for t in taxes.get('taxes', []))
invoiced = self.env['account.move'].search(
[('purchase_id', 'in', orders.ids), ('state', 'not in', ['draft', 'cancel'])]).mapped('amount_total')
rec.confirm = (total_orders - sum(invoiced)) * -1
rec.confirm = ((orders_without_tax + need_tax) - sum(invoiced)) * -1
@api.depends('analytic_account_id')
def _compute_reserve(self):
@ -96,24 +105,18 @@ class CrossoveredBudgetLines(models.Model):
orders = self.env['purchase.order.line'].search(
[('account_analytic_id', '=', rec.analytic_account_id.id),
('order_id.state', 'in', ['draft', 'sent', 'to approve'])]).mapped('order_id')
total_orders = sum(orders.mapped('amount_total'))
rec.reserve = total_orders * -1
@api.depends('planned_amount', 'provide', 'pull_out')
def _compute_final_amount(self):
for rec in self:
rec.final_amount = rec.planned_amount + rec.provide + rec.pull_out
@api.depends('from_operation_ids')
def _compute_pull_out(self):
for line in self:
operations = self.env['budget.operations'].search(
[('from_budget_line_id', '=', line.id), ('state', '=', 'confirmed')])
pull_out = sum(op.amount + op.purchase_remind for op in
operations.filtered(lambda x: x.state == 'confirmed') if
op.operation_type == 'transfer' or op.operation_type == 'decrease')
line.pull_out = pull_out if line.planned_amount < 0 else pull_out * -1
orders_without_tax = sum(orders.mapped('amount_total')) - sum(orders.mapped('amount_tax'))
need_tax = 0
for line in orders.mapped('order_line'):
vals = line._prepare_compute_all_values()
taxes = line.taxes_id.filtered(lambda x: x.analytic).compute_all(
vals['price_unit'],
vals['currency_id'],
vals['product_qty'],
vals['product'],
vals['partner'])
need_tax += sum(t.get('amount', 0.0) for t in taxes.get('taxes', []))
rec.reserve = (orders_without_tax + need_tax) * -1
@api.depends('to_operation_ids')
def _compute_provide(self):
@ -198,9 +201,7 @@ class CrossoveredBudgetLines(models.Model):
('account_id', 'in',line.general_budget_id.account_ids.ids),
('date', '>=', date_from),
('date', '<=', date_to),
('move_id.state', '=', 'posted'),
('move_id.move_type', '=', 'in_invoice')
])
('move_id.state', '=', 'posted')])
total_amount = 0
for item in analytic_ids:
tax_id = item.tax_ids[0].analytic if item.tax_ids else False

View File

@ -186,7 +186,7 @@ msgstr "الدفعات"
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "Please Check Budget First"
msgstr ""
msgstr "برجاء التحقق من الضريبة"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0

View File

@ -14,11 +14,21 @@ class CrossoveredBudgetLines(models.Model):
for rec in self:
orders = self.env['purchase.order.line'].search(
[('account_analytic_id', '=', rec.analytic_account_id.id),
('order_id.state', 'in', ['purchase','done'])]).mapped('order_id')
total_orders = sum(orders.mapped('amount_total'))
('order_id.state', 'in', ['purchase', 'done'])]).mapped('order_id')
orders_without_tax = sum(orders.mapped('amount_total')) - sum(orders.mapped('amount_tax'))
need_tax = 0
for line in orders.mapped('order_line'):
vals = line._prepare_compute_all_values()
taxes = line.taxes_id.filtered(lambda x: x.analytic).compute_all(
vals['price_unit'],
vals['currency_id'],
vals['product_qty'],
vals['product'],
vals['partner'])
need_tax += sum(t.get('amount', 0.0) for t in taxes.get('taxes', []))
invoiced = self.env['account.move'].search(
[('purchase_id', 'in', orders.ids), ('state', 'not in', ['draft', 'cancel'])]).mapped('amount_total')
rec.confirm = (total_orders - sum(invoiced)) * -1
rec.confirm = ((orders_without_tax + need_tax) - sum(invoiced)) * -1
@api.depends('analytic_account_id')
def _compute_reserve(self):
@ -26,8 +36,18 @@ class CrossoveredBudgetLines(models.Model):
orders = self.env['purchase.order.line'].search(
[('account_analytic_id', '=', rec.analytic_account_id.id),
('order_id.state', 'in', ['draft', 'sent', 'to approve'])]).mapped('order_id')
total_orders = sum(orders.mapped('amount_total'))
rec.reserve = total_orders * -1
orders_without_tax = sum(orders.mapped('amount_total')) - sum(orders.mapped('amount_tax'))
need_tax = 0
for line in orders.mapped('order_line'):
vals = line._prepare_compute_all_values()
taxes = line.taxes_id.filtered(lambda x: x.analytic).compute_all(
vals['price_unit'],
vals['currency_id'],
vals['product_qty'],
vals['product'],
vals['partner'])
need_tax += sum(t.get('amount', 0.0) for t in taxes.get('taxes', []))
rec.reserve = (orders_without_tax + need_tax) * -1
def _compute_operations_amount(self):
if not self.ids: return

View File

@ -153,38 +153,39 @@ class AccountMove(models.Model):
('crossovered_budget_id.date_from', '<=', self.date),
('crossovered_budget_id.date_to', '>=', self.date)])
if not budget_lines:
raise UserError(_('Analytic account %s is not linked with budget') % self.analytic_account_id.name)
else:
budget_line = budget_lines
remain = abs(budget_line.remain)
budget_line = budget_lines
if budget_line:
remain = abs(budget_line.remain) if budget_line else 0
tax_id = self.tax_ids[0].analytic if self.tax_ids else False
price_before_tax= self.unit_amount* self.quantity
tax_price = self.total_amount - price_before_tax
amount = price_before_tax + (tax_price if tax_id else 0)
new_remain = remain - amount
data = {
'name': _('Expense: %s') % self.employee_id.name,
'date': self.date,
'beneficiary_id': self.employee_id.user_id.partner_id.id,
'type': 'expense',
'ref': self.name,
'description': self.name,
'total_amount': amount,
'lines_ids': [(0, 0, {
'amount': amount,
'analytic_account_id': self.analytic_account_id.id,
'description': self.product_id.name,
'budget_line_id': budget_line.id,
'remain': new_remain + amount,
'new_balance': new_remain,
'account_id': self.account_id.id
})],
'expense_id': self.id
}
self.env['budget.confirmation'].create(data)
else:
new_remain = 0
amount=0
data = {
'name': _('Expense: %s') % self.employee_id.name,
'date': self.date,
'beneficiary_id': self.employee_id.user_id.partner_id.id,
'type': 'expense',
'ref': self.name,
'description': self.name,
'total_amount': amount,
'lines_ids': [(0, 0, {
'amount': amount,
'analytic_account_id': self.analytic_account_id.id,
'description': self.product_id.name,
'budget_line_id': budget_line.id if budget_line else False,
'remain': new_remain + amount,
'new_balance': new_remain,
'account_id': self.account_id.id
})] if budget_line else False,
'expense_id': self.id
}
self.env['budget.confirmation'].create(data)
self.write({
'is_check': True,
'state': 'wait_budget'
})
self.write({
'is_check': True,
'state': 'wait_budget'
})