~akretion-team/openerp.pt-br-localiz/l10n_br_base-demo

« back to all changes in this revision

Viewing changes to l10n_br_account/account_invoice.py

  • Committer: Akretion Bot
  • Date: 2012-09-04 21:14:59 UTC
  • mfrom: (345.1.1 br)
  • Revision ID: code.bot@akretion.com-20120904211459-mnmbnu1c9uk706dz
merged with parent rev #346

Show diffs side-by-side

added added

removed removed

Lines of Context:
317
317
                'account.invoice.tax': (_get_invoice_tax, None, 20),
318
318
                'account.invoice.line': (_get_invoice_line, ['price_unit','invoice_line_tax_id','quantity','discount'], 20),
319
319
            },
320
 
            multi='all'),   
 
320
            multi='all'),
321
321
        'cofins_base': fields.function(_amount_all, method=True, digits_compute=dp.get_precision('Account'), string='Base COFINS',
322
322
            store={
323
323
                'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 20),
338
338
                'account.invoice.tax': (_get_invoice_tax, None, 20),
339
339
                'account.invoice.line': (_get_invoice_line, ['price_unit','invoice_line_tax_id','quantity','discount'], 20),
340
340
            },
341
 
            multi='all'), 
 
341
            multi='all'),
342
342
    }
343
343
    
344
344
    def _default_fiscal_operation_category(self, cr, uid, context=None):
821
821
                xNome = normalize('NFKD', unicode(inv.partner_id.legal_name or '')).encode('ASCII', 'ignore')
822
822
 
823
823
            StrRegE = {
824
 
                       'xNome': xNome,
 
824
                       'xNome': xNome, 
825
825
                       'IE': re.sub('[%s]' % re.escape(string.punctuation), '', inv.partner_id.inscr_est or ''),
826
826
                       'ISUF': '',
827
827
                       'email': inv.partner_id.email or '',
1398
1398
            
1399
1399
            infNFe = SubElement(NFe, 'infNFe', {'versao': '2.00', 'Id': nfe_key })
1400
1400
 
1401
 
            #Dados da identificação da nota fiscal
 
1401
            # Dados da identificação da nota fiscal
1402
1402
            ide = SubElement(infNFe, 'ide')
1403
1403
 
1404
1404
            ide_cUF = SubElement(ide, 'cUF')
1801
1801
    def _fiscal_position_map(self, cr, uid, ids, partner_id, partner_invoice_id, company_id, fiscal_operation_category_id):
1802
1802
        result = {'fiscal_operation_id': False, 
1803
1803
                  'fiscal_document_id': False, 
1804
 
                  'document_serie_id': False}
 
1804
                  'document_serie_id': False,
 
1805
                  'journal_id': False,}
1805
1806
        obj_rule = self.pool.get('account.fiscal.position.rule')
1806
1807
        obj_fo_category = self.pool.get('l10n_br_account.fiscal.operation.category')
1807
1808
        
1808
 
        
1809
 
        if fiscal_operation_category_id:
1810
 
            obj_fo_category.read(cr, uid, fiscal_operation_category_id, [''])
1811
 
        
 
1809
        if not fiscal_operation_category_id:
 
1810
            return result
1812
1811
        
1813
1812
        fiscal_result = obj_rule.fiscal_position_map(cr, uid, partner_id, partner_invoice_id, company_id, fiscal_operation_category_id, context={'use_domain': ('use_invoice', '=', True)})   
1814
 
 
1815
1813
        result.update(fiscal_result)
1816
1814
 
1817
1815
        if result.get('fiscal_operation_id', False):
1827
1825
            for inv in self.browse(cr, uid, ids):
1828
1826
                for line in inv.invoice_line:
1829
1827
                    line.cfop_id = obj_foperation.cfop_id.id
 
1828
            
 
1829
            if fiscal_operation_category_id:
 
1830
                fo_category = obj_fo_category.browse(cr, uid, fiscal_operation_category_id)
 
1831
                journal_ids = [journal for journal in fo_category.journal_ids if journal.company_id.id == company_id]
 
1832
                if not journal_ids:
 
1833
                    raise osv.except_osv(_('Nenhuma Diário !'),_("Categoria de operação fisca: '%s', não tem um diário contábil para a empresa %s") % (fo_category.name, obj_company.name))
 
1834
                else:
 
1835
                    result['journal_id'] = journal_ids[0].id
 
1836
            
1830
1837
        return result
1831
1838
 
1832
1839
    def onchange_partner_id(self, cr, uid, ids, type, partner_id, date_invoice=False, 
1865
1872
        result['value'].update(fiscal_data)
1866
1873
       
1867
1874
        if fiscal_operation_id:
1868
 
        #    obj_fiscal_position = self.pool.get('account.fiscal.position').browse(cr, uid, fiscal_operation_id)
1869
 
        #    if not fiscal_operation_id == obj_fiscal_position.fiscal_operation_id.id:
1870
 
        #        obj_foperation = self.pool.get('l10n_br_account.fiscal.operation').browse(cr, uid, fiscal_operation_id)
1871
 
        #else:
1872
1875
            obj_foperation = self.pool.get('l10n_br_account.fiscal.operation').browse(cr, uid, fiscal_operation_id)
1873
1876
            result['value']['fiscal_position'] = False
1874
1877
            result['fiscal_document_id'] = obj_foperation.fiscal_document_id.id
1875
 
            #result['document_serie_id'] = obj_foperation.document_serie_id.id
1876
1878
            del result['value']['fiscal_operation_id']
1877
1879
 
1878
 
        for inv in self.browse(cr, uid, ids):
1879
 
            for line in inv.invoice_line:
1880
 
                line.cfop_id = obj_foperation.cfop_id.id
 
1880
            for inv in self.browse(cr, uid, ids):
 
1881
                for line in inv.invoice_line:
 
1882
                    line.cfop_id = obj_foperation.cfop_id.id
1881
1883
 
1882
1884
        return result
1883
1885
 
2044
2046
        pass
2045
2047
    
2046
2048
    def _amount_line(self, cr, uid, ids, prop, unknow_none, unknow_dict):
2047
 
        res = {} #super(account_invoice_line, self)._amount_line(cr, uid, ids, prop, unknow_none, unknow_dict)
 
2049
        res = {}
2048
2050
        tax_obj = self.pool.get('account.tax')
2049
2051
        cur_obj = self.pool.get('res.currency')
2050
2052
        for line in self.browse(cr, uid, ids):
2096
2098
            }
2097
2099
            price = line.price_unit * (1-(line.discount or 0.0)/100.0)
2098
2100
            taxes = tax_obj.compute_all(cr, uid, line.invoice_line_tax_id, price, line.quantity, product=line.product_id, address_id=line.invoice_id.address_invoice_id, partner=line.invoice_id.partner_id, fiscal_operation=line.fiscal_operation_id)
2099
 
            icms_cst = ''
2100
 
            ipi_cst = ''
2101
 
            pis_cst = ''
2102
 
            cofins_cst = ''
2103
 
 
 
2101
            
 
2102
            icms_cst = '99'
 
2103
            ipi_cst = '99'
 
2104
            pis_cst = '99'
 
2105
            cofins_cst = '99'
 
2106
            company_id = line.company_id.id and line.invoice_id.company_id.id or False
 
2107
            
2104
2108
            if line.fiscal_operation_id:
2105
2109
 
2106
 
                fiscal_operation_ids = self.pool.get('l10n_br_account.fiscal.operation.line').search(cr, uid, [('company_id','=',line.company_id.id),('fiscal_operation_id','=',line.fiscal_operation_id.id),('fiscal_classification_id','=',False)], order="fiscal_classification_id")
 
2110
                fiscal_operation_ids = self.pool.get('l10n_br_account.fiscal.operation.line').search(cr, uid, [('company_id','=',company_id),('fiscal_operation_id','=',line.fiscal_operation_id.id),('fiscal_classification_id','=',False)], order="fiscal_classification_id")
2107
2111
                for fo_line in self.pool.get('l10n_br_account.fiscal.operation.line').browse(cr, uid, fiscal_operation_ids):
2108
2112
                    if fo_line.tax_code_id.domain == 'icms':
2109
2113
                        icms_cst = fo_line.cst_id.code
2115
2119
                        cofins_cst = fo_line.cst_id.code
2116
2120
 
2117
2121
                if line.product_id:
2118
 
                    fo_ids_ncm = self.pool.get('l10n_br_account.fiscal.operation.line').search(cr, uid, [('company_id','=',line.company_id.id),('fiscal_operation_id','=',line.fiscal_operation_id.id),('fiscal_classification_id','=',line.product_id.property_fiscal_classification.id)])
 
2122
                    fo_ids_ncm = self.pool.get('l10n_br_account.fiscal.operation.line').search(cr, uid, [('company_id','=',company_id),('fiscal_operation_id','=',line.fiscal_operation_id.id),('fiscal_classification_id','=',line.product_id.property_fiscal_classification.id)])
2119
2123
    
2120
2124
                    for fo_line_ncm in self.pool.get('l10n_br_account.fiscal.operation.line').browse(cr, uid, fo_ids_ncm):
2121
2125
                        if fo_line_ncm.tax_code_id.domain == 'icms':
2132
2136
                    amount_tax = getattr(self, '_amount_tax_%s' % tax.get('domain', ''))
2133
2137
                    res[line.id].update(amount_tax(cr, uid, tax))
2134
2138
                except AttributeError:
2135
 
                    raise osv.except_osv(_('Error !'), _("Calculo do imposto não suportado para este dominio: '%s'") % (tax_brw.domain, ))
 
2139
                    # Caso não exista campos especificos dos impostos
 
2140
                    # no documento fiscal, os mesmos são calculados.
 
2141
                    continue
2136
2142
 
2137
2143
            if line.invoice_id:
2138
2144
                currency = line.invoice_id.currency_id