示例#1
0
    def set_document_receipt(cls, receipts):
        def doc_exists(id_, docs):
            for dc in docs:
                if dc.id == id_:
                    return True

        Document = Pool().get('cash_bank.document')

        lasts = {}
        for receipt in receipts:
            for doc in receipt.documents:
                if doc.last_receipt != receipt:
                    doc.last_receipt = receipt
                    doc.save()
                    if receipt.transfer and \
                            receipt.transfer.state in ['confirmed', 'post']:
                        pass
                    else:
                        if receipt.rec_name not in lasts:
                            lasts[receipt.rec_name] = []
                        lasts[receipt.rec_name].append(doc)

            # Verify if any document have been deleted from list
            # so last_receipt must be updated
            documents = Document.search([
                ('last_receipt', '=', receipt.id)])
            for doc in documents:
                if not doc_exists(doc.id, receipt.documents):
                    doc.set_previous_receipt()
                    doc.save()

        for key, value in lasts.items():
            write_log('Asigned to Receipt: ' + key, value)
示例#2
0
 def cancel(cls, transfers):
     Receipt = Pool().get('cash_bank.receipt')
     rcps = []
     for transfer in transfers:
         rcps += [transfer.receipt_from, transfer.receipt_to]
     Receipt.cancel(rcps)
     write_log('Cancelled', transfers)
示例#3
0
 def post(cls, transfers):
     Receipt = Pool().get('cash_bank.receipt')
     rcps = []
     for transfer in transfers:
         rcps += [transfer.receipt_from, transfer.receipt_to]
     Receipt.post(rcps)
     write_log('Posted', transfers)
示例#4
0
    def set_previous_receipt(self):
        Docs = Pool().get('cash_bank.document-cash_bank.receipt')

        cur_receipt = None
        if hasattr(self, 'last_receipt'):
            cur_receipt = self.last_receipt

        domain = [
            ('document', '=', self.id)
            ]
        if cur_receipt:
            domain.append(
                ('receipt', '!=', cur_receipt.id)
                )

        docs = Docs.search(domain, order=[('id', 'DESC')])

        lg = 'Returned to Receipt: '
        if not docs:
            self.last_receipt = None
            lg += 'None'
        else:
            self.last_receipt = docs[0].receipt
            lg += self.last_receipt.rec_name
        write_log(lg, [self])
示例#5
0
 def cancel(cls, closes):
     pool = Pool()
     Sale = pool.get('sale.sale')
     sales = []
     for close in closes:
         sales += close.sales
     Sale.cancel(sales)
     write_log('Cancelled', closes, 'cancel')
示例#6
0
 def draft(cls, closes):
     pool = Pool()
     Sale = pool.get('sale.sale')
     sales = []
     for close in closes:
         sales += close.sales
     Sale.draft(sales)
     write_log('Draft', closes)
示例#7
0
 def delete(cls, closes):
     for close in closes:
         if close.state not in ['draft']:
             write_log('Delete attempt', [close])
             raise UserError(
                 gettext('cashier.close_delete_draft',
                         close=close.rec_name))
     super(Close, cls).delete(closes)
示例#8
0
    def post(cls, receipts):
        Move = Pool().get('account.move')

        for receipt in receipts:
            for line in receipt.lines:
                line.reconcile()

        Move.post([r.move for r in receipts])
        write_log('log_action.msg_posted', receipts)
示例#9
0
 def confirm(cls, transfers):
     for transfer in transfers:
         if transfer.total <= 0:
             raise UserError(gettext('cash_bank.msg_no_total_cash_bank'))
         transfer.create_receipts()
         cls.set_transfer([transfer.receipt_from, transfer.receipt_to],
                          transfer)
     cls.save(transfers)  # Update receipts values
     write_log('Confirmed', transfers)
示例#10
0
 def draft(cls, convertions):
     Document = Pool().get('cash_bank.document')
     docs = []
     for convertion in convertions:
         for doc in convertion.documents:
             doc.convertion = None
             docs.append(doc)
             write_log('Convertion ' + convertion.rec_name + ' to Draft.',
                       [doc])
     Document.save(docs)
     write_log('Draft', convertions)
示例#11
0
 def delete(cls, reconciliations):
     for reconciliation in reconciliations:
         if reconciliation.state not in ['draft']:
             write_log('log_action.msg_deletion_attempt', [reconciliation])
             raise UserError(
                 gettext(
                     'cash_bank_reconciliation.'
                     'reconciliation_delete_draft',
                     reconciliation=reconciliation.rec_name,
                     state='Draft'))
     super(Reconciliation, cls).delete(reconciliations)
示例#12
0
 def confirm(cls, convertions):
     Document = Pool().get('cash_bank.document')
     docs = []
     for convertion in convertions:
         for doc in convertion.documents:
             doc.convertion = convertion
             write_log('Convertion ' + convertion.rec_name + ' confirmed.',
                       [doc])
             docs.append(doc)
     Document.save(docs)
     cls.set_number(convertions)
     write_log('Confirmed', convertions)
示例#13
0
 def draft(cls, transfers):
     Receipt = Pool().get('cash_bank.receipt')
     for transfer in transfers:
         receipt_from = transfer.receipt_from
         receipt_to = transfer.receipt_to
         transfer.receipt_from = None
         transfer.receipt_to = None
         Receipt.draft([receipt_from, receipt_to])
         Receipt.delete([receipt_to])
         Receipt.delete([receipt_from])
     cls.save(transfers)
     write_log('Draft', transfers)
示例#14
0
 def cancel(cls, reconciliations):
     pool = Pool()
     Receipt = pool.get('cash_bank.receipt')
     rps = []
     for recon in reconciliations:
         recon.verify_is_last()
         recon.write_to_move_line(True)
         for line in recon.lines:
             if line.check and line.receipt:
                 line.receipt.cash_bank_reconciliation = None
                 rps.append(line.receipt)
     Receipt.save(rps)
     write_log('log_action.msg_cancelled', reconciliations)
示例#15
0
    def confirm(cls, receipts):
        for receipt in receipts:
            if not receipt.lines:
                raise UserError(
                    gettext('cash_bank.msg_receipt_no_lines',
                    receipt=receipt.rec_name
                    ))
            if receipt.diff != 0:
                raise UserError(
                    gettext('cash_bank.msg_diff_total_lines_cash_bank'
                    ))
            if receipt.total < 0:
                raise UserError(
                    gettext('cash_bank.msg_total_less_zero'
                    ))
            if receipt.cash < 0:
                raise UserError(
                    gettext('cash_bank.msg_cash_less_zero'
                    ))
            for doc in receipt.documents:
                if doc.amount <= 0:
                    raise UserError(
                        gettext('cash_bank.msg_document_less_equal_zero'
                        ))
            if receipt.type.party_required and not receipt.party:
                raise UserError(
                    gettext('cash_bank.msg_party_required_cash_bank'
                    ))
            move, period = receipt._get_move()
            move.save()
            receipt_line_move = receipt._get_move_line(period)
            receipt_line_move.move = move
            receipt_line_move.save()
            move_lines = [receipt_line_move]
            for line in receipt.lines:
                line.validate_line()
                move_line = line.get_move_line(period)
                move_line.move = move
                move_line.save()
                line.line_move = move_line
                line.save()
                move_lines.append(move_line)
            move.lines = move_lines
            move.save()

            receipt.move = move
            receipt.line_move = receipt_line_move
            receipt.save()

        cls.set_number(receipts)
        write_log('log_action.msg_confirmed', receipts)
示例#16
0
 def confirm(cls, reconciliations):
     pool = Pool()
     Receipt = pool.get('cash_bank.receipt')
     receipts = []
     for recon in reconciliations:
         recon.verify()
         recon.write_to_move_line()
         for line in recon.lines:
             if line.check and line.receipt:
                 line.receipt.cash_bank_reconciliation = line
                 receipts.append(line.receipt)
     Receipt.save(receipts)
     cls.set_number(reconciliations)
     write_log('log_action.msg_confirmed', reconciliations)
示例#17
0
 def confirm(cls, closes):
     pool = Pool()
     Sale = pool.get('sale.sale')
     sales = []
     for close in closes:
         if not close.sales:
             raise UserError(
                 gettext(
                     'cashier.close_no_sales',
                     close=close.rec_name,
                 ))
         sales += close.sales
     Sale.quote(sales)
     cls.set_number(closes)
     write_log('Confirmed', closes, 'confirm')
示例#18
0
 def delete(cls, convertions):
     Document = Pool().get('cash_bank.document')
     docs = []
     for convertion in convertions:
         if convertion.state != 'draft':
             raise UserError(
                 gettext('cash_bank.msg_delete_document_cash_bank',
                         doc_name='Convertion',
                         doc_number=convertion.rec_name,
                         state='Draft'))
         for doc in convertion.documents:
             doc.convertion = None
             docs.append(doc)
             write_log('Convertion ' + convertion.rec_name + ' deleted.',
                       [doc])
     Document.save(docs)
     super(Convertion, cls).delete(convertions)
示例#19
0
    def delete(cls, receipts):
        pool = Pool()
        Attachment = pool.get('ir.attachment')

        atts = []
        for receipt in receipts:
            if receipt.state not in ['draft']:
                write_log('log_action.msg_deletion_attempt', [receipt])
                raise UserError(
                    gettext('cash_bank.msg_delete_document_cash_bank',
                        doc_name='Receipt',
                        doc_number=receipt.rec_name,
                        state='Draft'
                    ))
            for doc in receipt.documents:
                doc.set_previous_receipt()
                doc.save()
            for att in receipt.attachments:
                atts.append(att)

        Attachment.delete(atts)
        super(Receipt, cls).delete(receipts)
示例#20
0
 def draft(cls, reconciliations):
     write_log('log_action.msg_draft', reconciliations)
示例#21
0
 def create(cls, vlist):
     reconciliations = super(Reconciliation, cls).create(vlist)
     write_log('log_action.msg_created', reconciliations)
     return reconciliations
示例#22
0
    def post(cls, closes):
        pool = Pool()
        Config = pool.get('cashier.configuration')
        ConfigCashBank = pool.get('cash_bank.configuration')
        Sale = pool.get('sale.sale')
        Receipt = pool.get('cash_bank.receipt')

        config = Config(1)
        config_cash_bank = ConfigCashBank(1)
        receipts = []
        ach_receipts = []

        for close in closes:
            Sale.confirm(close.sales)
            Sale.process(close.sales)
            cls._sales_to_invoice(close.sales)

            msg = 'Cashier Close ' + close.rec_name

            lines = []
            for sale in close.sales:
                invoice = sale.invoices[0]
                lines.append(
                    cls._get_receipt_line('invoice_customer', msg,
                                          invoice.amount_to_pay,
                                          invoice.account, invoice.party,
                                          invoice))

            for cct in close.ccterminals:
                lines.append(
                    cls._get_receipt_line('move_line',
                                          msg + ' - ' + cct.creditcard.type,
                                          -cct.amount,
                                          cct.ccterminal.cash_bank.account,
                                          None, None))
                if cct.commission and cct.creditcard.account:
                    commission = cct.commission_amount
                    if commission:
                        lines.append(
                            cls._get_receipt_line(
                                'move_line', msg + ' - ' +
                                cct.creditcard.type + ' commission',
                                -commission, cct.creditcard.account, None,
                                None))
                        lines.append(
                            cls._get_receipt_line(
                                'move_line', msg + ' - ' +
                                cct.creditcard.type + ' commission',
                                commission, cct.ccterminal.cash_bank.account,
                                None, None))

            for rcv in close.customers_receivable:
                lines.append(
                    cls._get_receipt_line(
                        'move_line',
                        msg + ' ' + rcv.description if rcv.description else '',
                        -rcv.amount, rcv.party.account_receivable, rcv.party,
                        None))

            for rcv in close.customers_payable:
                lines.append(
                    cls._get_receipt_line(
                        'move_line',
                        msg + ' ' + rcv.description if rcv.description else '',
                        rcv.amount, rcv.party.account_payable, rcv.party,
                        None))

            for ach in close.achs:
                lines.append(
                    cls._get_receipt_line('move_line',
                                          msg + ' ' + ach.full_description(),
                                          -ach.amount,
                                          config_cash_bank.account_transfer,
                                          None, None))

                ach_receipt = Receipt(
                    date=ach.date,
                    cash_bank=ach.bank,
                    type=ach.receipt_type,
                    reference=ach.reference,
                    description=msg + ' ' + ach.full_description(),
                    party=ach.party,
                    cash=ach.amount,
                    lines=[
                        cls._get_receipt_line(
                            'move_line', msg + ' ' + ach.full_description(),
                            ach.amount, config_cash_bank.account_transfer,
                            None, None)
                    ])
                ach_receipt.save()
                ach.bank_receipt = ach_receipt
                ach.save()
                ach_receipts.append(ach_receipt)

            if close.diff != 0:
                lines.append(
                    cls._get_receipt_line('move_line', msg + ' Diff',
                                          -close.diff, config.diff_account,
                                          None, None))

            lines += cls._get_extra_lines(close)

            cash_receipt = Receipt(date=close.date,
                                   cash_bank=close.cashier.cash_bank_cash,
                                   type=close.cashier.receipt_type_cash,
                                   description=msg,
                                   party=config.party_sale,
                                   cash=close.cash,
                                   documents=cls._get_documents(
                                       close.documents),
                                   lines=lines)
            cash_receipt.save()

            close.cash_bank_receipt = cash_receipt
            close.save()

            receipts.append(cash_receipt)

        Receipt.confirm(receipts)
        Receipt.post(receipts)
        if ach_receipts:
            Receipt.confirm(ach_receipts)
            Receipt.post(ach_receipts)
            write_log('ACH Bank receipts Posted', closes)
        write_log('Posted', closes, 'post')
示例#23
0
 def create(cls, vlist):
     receipts = super(Receipt, cls).create(vlist)
     write_log('log_action.msg_created', receipts)
     return receipts
示例#24
0
 def draft(cls, receipts):
     write_log('log_action.msg_draft', receipts)
示例#25
0
 def create(cls, vlist):
     transfers = super(Transfer, cls).create(vlist)
     write_log('Created', transfers)
     return transfers
示例#26
0
 def cancel(cls, convertions):
     write_log('Cancelled', convertions)
示例#27
0
 def cancel(cls, receipts):
     Move = Pool().get('account.move')
     Move.delete([r.move for r in receipts])
     write_log('log_action.msg_cancelled', receipts)
示例#28
0
 def create(cls, vlist):
     documents = super(Document, cls).create(vlist)
     write_log('Created', documents)
     return documents
示例#29
0
 def create(cls, vlist):
     convertions = super(Convertion, cls).create(vlist)
     write_log('Created', convertions)
     return convertions
示例#30
0
 def create(cls, vlist):
     closes = super(Close, cls).create(vlist)
     write_log('Created', closes)
     return closes