bmya/odoo-bmya-cl

View on GitHub
l10n_cl_invoice/wizard/journal_config_wizard.py

Summary

Maintainability
B
6 hrs
Test Coverage
# -*- coding: utf-8 -*-
from __future__ import print_function
from openerp.osv import fields, osv, orm
from openerp import api
from openerp.tools.translate import _
import logging
from openerp.exceptions import Warning

# TODO: cambiar: si es giro solo no afecto, me incluye comprobantes afectos

_logger = logging.getLogger(__name__)

class account_journal_document_config(osv.osv_memory):

    _name = 'account.journal.document_config'

    _columns = {
        'debit_notes': fields.selection(
            [('dont_use','Do not use'), ('own_sequence','Use')],
            string='Debit Notes', required=True, default='own_sequence'),
        'credit_notes': fields.selection(
            [('own_sequence','Use')], string='Credit Notes', required=True,
            default='own_sequence'),
        'dte_register': fields.boolean(
            'Register Electronic Documents?', default=True, help="""
This option allows you to register electronic documents (DTEs) issued by MiPyme SII Portal, Third parties services, or by
Odoo itself (to register  DTEs issued by Odoo l10n_cl_dte/caf modules are needed.
"""),
        'non_dte_register': fields.boolean(
            'Register Manual Documents?'),
        'electronic_ticket': fields.boolean(
            'Register Electronic Ticket'),
        'free_tax_zone': fields.boolean(
            'Register Free-Tax Zone or # 1057 Resolution Documents?'),
        'settlement_invoice': fields.boolean(
            'Register Settlement Invoices?'),
        'weird_documents': fields.boolean(
            'Unusual Documents', help="""
Include unusual taxes documents, as transfer invoice, and reissue
"""),
#        'excempt_documents': fields.boolean(
#            'VAT Excempt Invoices', readonly=True,
#            default='_get_journal_excempt'),

        'other_available': fields.boolean(
            'Others available?', default='_get_other_avail')
    }

    @api.model
    def _get_other_avail(self):
        return True

    # @api.model
    # def _get_journal_excempt(self):
    #     return True

    _defaults= {
#        'debit_notes': 'own_sequence',
#        'credit_notes': 'own_sequence',
    }


    def confirm(self, cr, uid, ids, context=None):
        """
        Confirm Configure button
        """
        if context is None:
            context = {}

        journal_ids = context.get('active_ids', False)
        wizard = self.browse(cr, uid, ids[0], context=context)
        self.create_journals(cr, uid, journal_ids, wizard, context=context)

    def create_journals(self, cr, uid, journal_ids, wz, context=None):
        for journal in self.pool['account.journal'].browse(
                cr, uid, journal_ids, context=context):
            responsability = journal.company_id.responsability_id
            if not responsability.id:
                raise orm.except_orm(
                    _('Your company has not setted any responsability'),
                    _('Please, set your company responsability in the company partner before continue.'))
                _logger.warning(
                    'Your company "%s" has not setted any responsability.' % journal.company_id.name)
          
            journal_type = journal.type
            if journal_type in ['sale', 'sale_refund']:
                letter_ids = [x.id for x in responsability.issued_letter_ids]
            elif journal_type in ['purchase', 'purchase_refund']:
                letter_ids = [x.id for x in responsability.received_letter_ids]
            
            if journal_type == 'sale':
                for doc_type in ['invoice', 'debit_note']:
                    self.create_journal_document(
                        cr, uid, letter_ids, doc_type, journal.id, wz, context)
            elif journal_type == 'purchase':
                for doc_type in ['invoice', 'debit_note', 'invoice_in']:
                    self.create_journal_document(
                        cr, uid, letter_ids, doc_type, journal.id, wz, context)
                    # self.create_journal_document(cr, uid, letter_ids, doc_type, journal.id, non_dte_register, dte_register, settlement_invoice, free_tax_zone, credit_notes, debit_notes, context)
            elif journal_type in ['sale_refund', 'purchase_refund']:
                print('notas de credito de compra o venta')
                self.create_journal_document(
                    cr, uid, letter_ids, 'credit_note', journal.id, wz, context)

    def create_sequence(self, cr, uid, name, journal, context=None):
        vals = {
            'name': journal.name + ' - ' + name,
            'padding': 6,
            # 'prefix': journal.point_of_sale,
        }
        sequence_id = self.pool['ir.sequence'].create(
            cr, uid, vals, context=context)
        return sequence_id

    def create_journal_document(self, cr, uid, letter_ids, document_type,
                                journal_id, wz, context=None):

        print(document_type, letter_ids)
        if_zf = [] if wz.free_tax_zone else [901, 906, 907]
        if_lf = [] if wz.settlement_invoice else [40, 43]
        if_tr = [] if wz.weird_documents else [29, 108, 914, 911, 904, 905]
        # if_pr = [] if wz.purchase_invoices else [45, 46]
        journal = self.pool['account.journal'].browse(
            cr, uid, journal_id, context=context)
        if_na = [] if journal.excempt_documents else [32, 34]
        dt_types_exclude = if_zf + if_lf + if_tr + if_na
        print(dt_types_exclude)

        document_class_obj = self.pool['sii.document_class']
        document_class_ids = document_class_obj.search(
            cr, uid, [
                ('document_letter_id', 'in', letter_ids),
                ('document_type', '=', document_type),
                ('sii_code', 'not in', dt_types_exclude)], context=context)

        journal_document_obj = self.pool['account.journal.sii_document_class']

        sequence = 10

        for document_class in document_class_obj.browse(
                cr, uid, document_class_ids, context=context):
            print('ws existente -- non_dte_register: %s settlement_invoice: %s free_tax: %s, dte_register %s' % (wz.non_dte_register, wz.settlement_invoice, wz.free_tax_zone, wz.dte_register))
            print(document_class.report_name, document_class.sii_code)
            if not document_class.dte:
                print('documento manual: ')
                if wz.non_dte_register:
                    print('non dte')
                else:
                    continue
            else:
                print('documento electronico')
                if wz.dte_register:
                    print('dte')
                    pass
                else:
                    continue

            print('crear')
            sequence_id = self.create_sequence(cr, uid, document_class.name,
                                               journal, context)
            vals = {
                'sii_document_class_id': document_class.id,
                'sequence_id': sequence_id,
                'journal_id': journal.id,
                'sequence': sequence,
            }
            journal_document_obj.create(cr, uid, vals, context=context)
            sequence +=10