Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
 
  • How to check amounts in the partial reconcile table aren't signed or not ?

    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 519
    Comment on it

    If you want to check amounts in the partial reconcile table aren't signed or not then follow the following code .

    amount = abs(line.debit - line.credit)
                amount_residual_currency = abs(line.amount_currency) or 0.0
                sign = 1 if (line.debit - line.credit) > 0 else -1
    
                for partial_line in (line.matched_debit_ids + line.matched_credit_ids):
                    amount -= partial_line.amount
                    #getting the date of the matched item to compute the amount_residual in currency
                    date = partial_line.credit_move_id.date if partial_line.debit_move_id == line else partial_line.debit_move_id.date
                    if line.currency_id:
                        if partial_line.currency_id and partial_line.currency_id == line.currency_id:
                            amount_residual_currency -= partial_line.amount_currency
                        else:
                            amount_residual_currency -= line.company_id.currency_id.with_context(date=date).compute(partial_line.amount, line.currency_id)
    
                #computing the `reconciled` field. As we book exchange rate difference on each partial matching,
                #we can only check the amount in company currency
                reconciled = False
                digits_rounding_precision = line.company_id.currency_id.rounding
                if float_is_zero(amount, digits_rounding_precision) and (line.debit or line.credit):
                    reconciled = True
                line.reconciled = reconciled
    
                line.amount_residual = line.company_id.currency_id.round(amount * sign)
                line.amount_residual_currency = line.currency_id and line.currency_id.round(amount_residual_currency * sign) or 0.0
    
        @api.depends('debit', 'credit')
        def _store_balance(self):
            for line in self:
                line.balance = line.debit - line.credit
    
        @api.model
        def _get_currency(self):
            currency = False
            context = self._context or {}
            if context.get('default_journal_id', False):
                currency = self.env['account.journal'].browse(context['default_journal_id']).currency_id
            return currency
    
        @api.model
        def _get_journal(self):
            """ Return journal based on the journal type """
            context = dict(self._context or {})
            journal_id = context.get('journal_id', False)
            if journal_id:
                return journal_id
    
            journal_type = context.get('journal_type', False)
            if journal_type:
                recs = self.env['account.journal'].search([('type', '=', journal_type)])
                if not recs:
                    action = self.env.ref('account.action_account_journal_form')
                    msg = _("""Cannot find any account journal of "%s" type for this company, You should create one.\n Please go to Journal Configuration""") % journal_type.replace('_', ' ').title()
                    raise RedirectWarning(msg, action.id, _('Go to the configuration panel'))
                journal_id = recs[0].id
            return journal_id
    
        @api.depends('debit', 'credit', 'move_id.matched_percentage', 'move_id.journal_id')
        def _compute_cash_basis(self):
            for move_line in self:
                if move_line.journal_id.type in ('sale', 'purchase'):
                    move_line.debit_cash_basis = move_line.debit * move_line.move_id.matched_percentage
                    move_line.credit_cash_basis = move_line.credit * move_line.move_id.matched_percentage
                else:
                    move_line.debit_cash_basis = move_line.debit
                    move_line.credit_cash_basis = move_line.credit
                move_line.balance_cash_basis = move_line.debit_cash_basis - move_line.credit_cash_basis
    
        @api.one
        @api.depends('move_id.line_ids')
        def _get_counterpart(self):
            counterpart = set()
            for line in self.move_id.line_ids:
                if (line.account_id.code != self.account_id.code):
                    counterpart.add(line.account_id.code)
            if len(counterpart) > 2:
                counterpart = counterpart[0:2] + ["..."]
            self.counterpart = ",".join(counterpart)
    
        name = fields.Char(required=True, string="Label")
        quantity = fields.Float(digits=(16, 2),
            help="The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.")
        product_uom_id = fields.Many2one('product.uom', string='Unit of Measure')
        product_id = fields.Many2one('product.product', string='Product')
        debit = fields.Monetary(default=0.0, currency_field='company_currency_id')
        credit = fields.Monetary(default=0.0, currency_field='company_currency_id')
        balance = fields.Monetary(compute='_store_balance', store=True, currency_field='company_currency_id', default=0.0, help="Technical field holding the debit - credit in order to open meaningful graph views from reports")
        debit_cash_basis = fields.Monetary(currency_field='company_currency_id', default=0.0, compute='_compute_cash_basis', store=True)
        credit_cash_basis = fields.Monetary(currency_field='company_currency_id', default=0.0, compute='_compute_cash_basis', store=True)
        balance_cash_basis = fields.Monetary(compute='_compute_cash_basis', store=True, currency_field='company_currency_id', default=0.0, help="Technical field holding the debit_cash_basis - credit_cash_basis in order to open meaningful graph views from reports")
        amount_currency = fields.Monetary(default=0.0, help="The amount expressed in an optional other currency if it is a multi-currency entry.")
        company_currency_id = fields.Many2one('res.currency', related='company_id.currency_id', readonly=True,
            help='Utility field to express amount currency', store=True)
        currency_id = fields.Many2one('res.currency', string='Currency', default=_get_currency,
            help="The optional other currency if it is a multi-currency entry.")
        amount_residual = fields.Monetary(compute='_amount_residual', string='Residual Amount', store=True, currency_field='company_currency_id',
            help="The residual amount on a journal item expressed in the company currency.")
        amount_residual_currency = fields.Monetary(compute='_amount_residual', string='Residual Amount in Currency', store=True,
            help="The residual amount on a journal item expressed in its currency (possibly not the company currency).")
        account_id = fields.Many2one('account.account', string='Account', required=True, index=True,
            ondelete="cascade", domain=[('deprecated', '=', False)], default=lambda self: self._context.get('account_id', False))
        move_id = fields.Many2one('account.move', string='Journal Entry', ondelete="cascade",
            help="The move of this entry line.", index=True, required=True, auto_join=True)
        narration = fields.Text(related='move_id.narration', string='Internal Note')
        ref = fields.Char(related='move_id.ref', string='Partner Reference', store=True, copy=False)
        payment_id = fields.Many2one('account.payment', string="Originator Payment", help="Payment that created this entry")
        statement_id = fields.Many2one('account.bank.statement', string='Statement',
            help="The bank statement used for bank reconciliation", index=True, copy=False)
        reconciled = fields.Boolean(compute='_amount_residual', store=True)
        matched_debit_ids = fields.One2many('account.partial.reconcile', 'credit_move_id', String='Matched Debits',
            help='Debit journal items that are matched with this journal item.')
        matched_credit_ids = fields.One2many('account.partial.reconcile', 'debit_move_id', String='Matched Credits',
            help='Credit journal items that are matched with this journal item.')
        journal_id = fields.Many2one('account.journal', related='move_id.journal_id', string='Journal',
            default=_get_journal, required=True, index=True, store=True, copy=False)
        blocked = fields.Boolean(string='No Follow-up', default=False,
            help="You can check this box to mark this journal item as a litigation with the associated partner")
        date_maturity = fields.Date(string='Due date', index=True, required=True,
            help="This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.")
        date = fields.Date(related='move_id.date', string='Date', required=True, index=True, default=fields.Date.context_today, store=True, copy=False)
        analytic_line_ids = fields.One2many('account.analytic.line', 'move_id', string='Analytic lines', oldname="analytic_lines")
        tax_ids = fields.Many2many('account.tax', string='Taxes', readonly=True)
        tax_line_id = fields.Many2one('account.tax', string='Originator tax', readonly=True)
        analytic_account_id = fields.Many2one('account.analytic.account', string='Analytic Account')
        company_id = fields.Many2one('res.company', related='account_id.company_id', string='Company', store=True)
        counterpart = fields.Char("Counterpart", compute='_get_counterpart', help="Compute the counter part accounts of this journal item for this journal entry. This can be needed in reports.")
    
        # TODO: put the invoice link and partner_id on the account_move
        invoice_id = fields.Many2one('account.invoice', oldname="invoice")
        partner_id = fields.Many2one('res.partner', string='Partner', index=True, ondelete='restrict')
        user_type_id = fields.Many2one('account.account.type', related='account_id.user_type_id', index=True, store=True, oldname="user_type")
    
        _sql_constraints = [
            ('credit_debit1', 'CHECK (credit*debit=0)', 'Wrong credit or debit value in accounting entry !'),
            ('credit_debit2', 'CHECK (credit+debit>=0)', 'Wrong credit or debit value in accounting entry !'),
        ]
    
        @api.multi
        @api.constrains('currency_id', 'account_id')
        def _check_currency(self):
            for line in self:
                if line.account_id.currency_id:
                    if not line.currency_id or line.currency_id.id != line.account_id.currency_id.id:
                        raise UserError(_('The selected account of your Journal Entry forces to provide a secondary currency. You should remove the secondary currency on the account or select a multi-currency view on the journal.'))
    

     

 0 Comment(s)

Sign In
                           OR                           
                           OR                           
Register

Sign up using

                           OR                           
Forgot Password
Fill out the form below and instructions to reset your password will be emailed to you:
Reset Password
Fill out the form below and reset your password: