Exemplo n.º 1
0
    def do_import(self):
        
        supplier_file = base64.decodestring(self.supplier_file)
        buff = StringIO.StringIO(supplier_file)
        db = base.DBF(usersfile)
        

        
        

# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
Exemplo n.º 2
0
    def do_export_articole(self, product_ids):
        result_html = ''
        """
        Articole 
        Nr. crt. Nume câmp Tip Mărime câmp Descriere 
        1. COD Character 16 Cod articol 
        2. DENUMIRE Character 60 Denumire articol 
        3. UM Character 5 Unitate de masura 
        4. TVA Numeric 5,2 Procent TVA articol 
        5. TIP* Character 2 Cod tip 
        6. DEN_TIP Character 36 Denumire tip 
        7. PRET_VANZ Numeric 15,4 Pret de vanzare fara TVA (optional) 
        8. PRET_V_TVA Numeric 15,4 Pret de vanzare cu TVA (optional) 
        9. COD_BARE Character 16 Cod de bare (optional) 
        10. CANT_MIN Numeric 14,3 Stoc minim (optional) 
        11. GRUPA Character 16 Grupa de articol (optional) 
        """
        Articole = {
            'COD': dbf_fields.CharField(max_length=16),  #Cod articol  
            'DENUMIRE':
            dbf_fields.CharField(max_length=60),  #Denumire articol  
            'UM': dbf_fields.CharField(max_length=5),  #Unitate de masura  
            'TIP': dbf_fields.CharField(max_length=2),  #Cod tip  
            'DEN_TIP': dbf_fields.CharField(max_length=36),  #Denumire tip  
            'TVA': dbf_fields.DecimalField(size=5, deci=2),  # TVA 
        }
        temp_file = StringIO.StringIO()
        articole_dbf = base.DBF(temp_file, Articole)
        for product in product_ids:
            if product.taxes_id:
                tva = int(product.taxes_id[0].amount * 100)
            else:
                tva = 0

            values = {
                'COD': product.default_code or '',
                'DENUMIRE': self.unaccent(product.name[:60]),
                'UM': product.uom_id.name[:5].split(' ')[0],
                'TIP': product.categ_id.code_saga or '',
                'DEN_TIP': self.unaccent(product.categ_id.name[:36]),
                'TVA': tva,
            }
            articole_dbf.insert(values)

        return temp_file, result_html
Exemplo n.º 3
0
    def do_export_furnizori(self, partner_ids):
        """
        Furnizori 
        Nr. crt. Nume câmp Tip Mărime câmp Descriere 
        
         
        8. CONT_BANCA Character 36 Contul bancar (optional) 
        9. FILIALA Character 36 Filiala Banca (optional) 
        10. GRUPA Character 16 Grupa de furnizor (optional) 
        11. AGENT Character 4 Cod agent (optional) 
        12. DEN_AGENT Character 36 Nume agent (optional) 
        13. TIP_TERT Character 1 I pt. intracomunitar, E pt. extracomunitari 



        """
        result_html = ''
        Furnizori = {
            'COD': dbf_fields.CharField(max_length=5),  #Cod furnizor 
            'DENUMIRE':
            dbf_fields.CharField(max_length=48),  #Denumire furnizor 
            'COD_FISCAL':
            dbf_fields.CharField(max_length=13),  #Cod Fiscal, furnizor  
            'ANALITIC': dbf_fields.CharField(max_length=16),  #Cont analitic 
            'ZS': dbf_fields.IntegerField(
                size=3),  #Numeric 3 Zile Scadenţă (optional) 
            'ADRESA': dbf_fields.CharField(max_length=48),  #Adresa (optional) 
            # 'BANCA':       dbf_fields.CharField(max_length=48),  #Banca (optional)
            'TARA': dbf_fields.CharField(max_length=2),  #Codul de tara (RO) 
            'TEL':
            dbf_fields.CharField(max_length=20),  #Numar telefon (optional) 
            'EMAIL': dbf_fields.CharField(max_length=100),  #Email (optional) 
            'IS_TVA': dbf_fields.IntegerField(
                size=1),  #Numeric 1 1, dacă este platitor de TVA 
        }
        temp_file = StringIO.StringIO()
        furnizori_dbf = base.DBF(temp_file, Furnizori)
        for partner in partner_ids:
            if not partner.ref_supplier:
                error = _(
                    "Partenerul %s nu are cod de furnizor SAGA") % partner.name
                result_html += '<div>Eroare %s</div>' % error
                if not self.ignore_error:
                    raise Warning(error)

            if not partner.vat_subjected:
                cod_fiscal = partner.vat[
                    2:] if partner.vat and partner.vat[:
                                                       2] == 'RO' else partner.vat
                is_tva = 0
            else:
                cod_fiscal = partner.vat
                is_tva = 1

            if partner.ref_supplier:
                analitic = '401.' + partner.ref_supplier.zfill(5)
            else:
                analitic = ''

            if partner.ref_supplier:
                partner_code = partner.ref_supplier.zfill(5)
            else:
                partner_code = ''

            values = {
                'COD': partner_code,
                'DENUMIRE': self.unaccent(partner.name[:48]),
                'COD_FISCAL': cod_fiscal or '',
                'ANALITIC': analitic,
                'ZS': 0,
                'ADRESA': self.unaccent(partner.contact_address),
                #'BANCA'
                'TARA': partner.country_id.code or '',
                'TEL': partner.phone or '',
                'EMAIL': partner.email or '',
                'IS_TVA': is_tva,
            }

            furnizori_dbf.insert(values)

        return temp_file, result_html
Exemplo n.º 4
0
    def do_export_iesiri(self, invoice_out_ids):
        result_html = ''
        """
Ieşiri 
Nr. crt. Nume câmp Tip Mărime câmp Descriere 
1. NR_IESIRE Character 16 Numărul documentului de ieşire, bon 
2. COD Character 5 Cod client 
3. DATA Date - Data documentului de ieşire 
4. SCADENT Date - Data scadenţei 
5. TIP Character 1 "A" - pentru aviz, "T" - taxare inversă... 
6. TVAI Numeric 1 1 pentru TVA la incasare 
7. GESTIUNE Character 4 Cod gestiune (optional) 
8. DEN_GEST Character 36 Denumirea gestiunii (optional) 
9. COD_ART Character 16 Cod articol 
10. DEN_ART Character 60 Denumire articol 
11. UM Character 5 Unitatea de măsură pt.articol 
12. CANTITATE Numeric 14,3 Cantitate 
13. DEN_TIP Character 36 Denumirea tipului de articol (optional) 
14. TVA_ART Numeric 2 Procentul de TVA 
15. VALOARE Numeric 15,2 Valoarea totală, fără TVA 
16. TVA Numeric 15,2 TVA total 
17. CONT Character 20 Contul corespondent 
18. PRET_VANZ Numeric 15,2 Preţul de vânzare 
19. GRUPA Character 16 Cod de grupa de articol contabil (optional) 



Numele fişierului trebuie să fie în formatul următor: IE_<data-inceput>_<data-sfarsit>.dbf.
Fişierul va conţine câte o înregistrare pentru fiecare articol din factură. 

    """
        Iesiri = {
            'NR_IESIRE': dbf_fields.CharField(
                max_length=16),  # Numărul documentului de ieşire, bon 
            'COD': dbf_fields.CharField(max_length=5),  # Cod client 
            'DATA': dbf_fields.DateField(),  # Data documentului de ieşire
            'SCADENT': dbf_fields.DateField(),  # Data scadenţei 
            'TIP': dbf_fields.CharField(
                max_length=1),  # "A" - pentru aviz, "T" - taxare inversă... 
            'TVAI': dbf_fields.IntegerField(
                size=1),  # 1 pentru TVA la incasare                    
            'GESTIUNE':
            dbf_fields.CharField(max_length=4),  # Cod gestiune (optional) 
            'DEN_GEST': dbf_fields.CharField(
                max_length=36),  # Denumirea gestiunii (optional) 
            'COD_ART':
            dbf_fields.CharField(max_length=16),  # Cod articol (optional) 
            'DEN_ART':
            dbf_fields.CharField(max_length=60),  # Denumire articol 
            'UM': dbf_fields.CharField(
                max_length=5),  # Unitatea de măsură pt.articol (optional) 
            'CANTITATE': dbf_fields.DecimalField(size=14, deci=3),  # Cantitate
            'DEN_TIP': dbf_fields.CharField(
                max_length=36),  # Denumirea tipului de articol (optional) 
            'TVA_ART': dbf_fields.IntegerField(size=2),  #Procentul de TVA 
            'VALOARE':
            dbf_fields.DecimalField(size=15,
                                    deci=2),  # Valoarea totală, fără TVA 
            'TVA': dbf_fields.DecimalField(size=15, deci=2),  # TVA total 
            'CONT': dbf_fields.CharField(size=20),  #Contul corespondent
            'PRET_VANZ': dbf_fields.DecimalField(size=15,
                                                 deci=2),  # TVA total 
            'GRUPA': dbf_fields.CharField(
                max_length=16),  #Cod de grupa de articol contabil (optional) 
        }

        temp_file = StringIO.StringIO()
        iesiri_dbf = base.DBF(temp_file, Iesiri)

        #todo: de convertit toate preturirile in RON

        for invoice in invoice_out_ids:
            if invoice.vat_on_payment:
                tvai = 1
            else:
                tvai = 0
            for line in invoice.invoice_line:
                if line.invoice_line_tax_id:
                    tva_art = int(line.invoice_line_tax_id[0].amount * 100)
                else:
                    tva_art = 0

                cont = line.account_id.code
                while cont[-1] == '0':
                    cont = cont[:-1]

                if invoice.commercial_partner_id.ref_customer:
                    partner_code = invoice.commercial_partner_id.ref_customer.zfill(
                        5)
                else:
                    partner_code = ''

                values = {
                    'NR_IESIRE': invoice.number.replace('/', ' '),
                    'COD': partner_code,
                    'DATA': fields.Date.from_string(invoice.date_invoice),
                    'SCADENT': fields.Date.from_string(invoice.date_due),
                    'TIP': '',
                    'TVAI': tvai,
                    'GESTIUNE': '',
                    'DEN_GEST': '',
                    'COD_ART': line.product_id.default_code or '',
                    'DEN_ART': self.unaccent(line.name[:60]),
                    'UM': '',
                    'CANTITATE': line.quantity,
                    'DEN_TIP': '',
                    'TVA_ART': tva_art,
                    'VALOARE': line.
                    price_subtotal,  #todo: daca pretul include tva valoarea cum o fi ?
                    'TVA': line.price_taxes,
                    'CONT': cont,
                    'PRET_VANZ': 0,
                    'GRUPA': '',
                }
                if line.uos_id:
                    values['UM'] = line.uos_id.name[:5].split(' ')[0]
                if line.product_id.categ_id:
                    values['DEN_TIP'] = self.unaccent(
                        line.product_id.categ_id.name[:36])

                if not self.export_product:
                    values['COD_ART'] = ''
                    values['DEN_TIP'] = ''
                iesiri_dbf.insert(values)
        return temp_file, result_html
Exemplo n.º 5
0
    def do_export_intrari(self, invoice_in_ids, voucher_in_ids):
        result_html = ''
        """
 Intrări 
Nr. crt. Nume câmp Tip Mărime câmp Descriere 
1. NR_NIR Numeric 7 Număr NIR 
2. NR_INTRARE Character 16 Numărul documentului de intrare 
3. GESTIUNE Character 4 Cod gestiune (optional) 
4. DEN_GEST Character 36 Denumirea gestiunii (optional) 
5. COD Character 5 Cod furnizor 
6. DATA Date - Data documentului de intrare (a facturii) 
7. SCADENT Date - Data scadenţei 
8. TIP Character 1 "A" - pentru aviz, "T" - taxare inversă... 
9. TVAI Numeric 1 1 pentru TVA la incasare 
10. COD_ART Character 16 Cod articol (optional) 
11. DEN_ART Character 60 Denumire articol 
12. UM Character 5 Unitatea de măsură pt.articol (optional) 
13. CANTITATE Numeric 14,3 Cantitate 
14. DEN_TIP Character 36 Denumirea tipului de articol (optional) 
15. TVA_ART Numeric 2 Procentul de TVA 
16. VALOARE Numeric 15,2 Valoarea totală, fără TVA 
17. TVA Numeric 15,2 TVA total 
18. CONT Character 20 Contul corespondent 
19. PRET_VANZ Numeric 15,2 Preţul de vânzare, (optional) 
20. GRUPA Character 16 Cod de grupa de articol contabil (optional) 
        """

        Intrari = {
            'NR_NIR': dbf_fields.IntegerField(size=7),  # Număr NIR 
            'NR_INTRARE': dbf_fields.CharField(
                max_length=16),  # Numărul documentului de intrare 
            'GESTIUNE':
            dbf_fields.CharField(max_length=4),  # Cod gestiune (optional) 
            'DEN_GEST': dbf_fields.CharField(
                max_length=36),  # Denumirea gestiunii (optional) 
            'COD': dbf_fields.CharField(max_length=5),  # Cod furnizor 
            'DATA': dbf_fields.DateField(
            ),  # Data documentului de intrare (a facturii) 
            'SCADENT': dbf_fields.DateField(),  # Data scadenţei 
            'TIP': dbf_fields.CharField(
                max_length=1),  # "A" - pentru aviz, "T" - taxare inversă... 
            'TVAI':
            dbf_fields.IntegerField(size=1),  # 1 pentru TVA la incasare 
            'COD_ART':
            dbf_fields.CharField(max_length=16),  # Cod articol (optional) 
            'DEN_ART':
            dbf_fields.CharField(max_length=60),  # Denumire articol 
            'UM': dbf_fields.CharField(
                max_length=5),  # Unitatea de măsură pt.articol (optional) 
            'CANTITATE': dbf_fields.DecimalField(size=14, deci=3),  # Cantitate
            'DEN_TIP': dbf_fields.CharField(
                max_length=36),  # Denumirea tipului de articol (optional) 
            'TVA_ART': dbf_fields.IntegerField(size=2),  #Procentul de TVA 
            'VALOARE':
            dbf_fields.DecimalField(size=15,
                                    deci=2),  # Valoarea totală, fără TVA 
            'TVA': dbf_fields.DecimalField(size=15, deci=2),  # TVA total 
            'CONT': dbf_fields.CharField(size=20),  #Contul corespondent
            'PRET_VANZ': dbf_fields.DecimalField(size=15,
                                                 deci=2),  # TVA total 
            'GRUPA': dbf_fields.CharField(
                max_length=16),  #Cod de grupa de articol contabil (optional) 
        }

        temp_file = StringIO.StringIO()
        intrari_dbf = base.DBF(temp_file, Intrari)

        #todo: de convertit toate preturirile in RON

        for invoice in invoice_in_ids:
            if invoice.vat_on_payment:
                tvai = 1
            else:
                tvai = 0

            if invoice.fiscal_receipt:  # daca este un bon fiscal atunci
                tip = 'B'
            else:
                tip = ''

            for line in invoice.invoice_line:
                if line.invoice_line_tax_id:
                    tva_art = int(line.invoice_line_tax_id[0].amount * 100)
                else:
                    tva_art = 0

                cont = line.account_id.code
                while cont[-1] == '0':
                    cont = cont[:-1]

                #inlocuire contrui de cheltuiala cu cele de stoc
                if cont == '6028':
                    cont = '3028'
                elif cont == '6022':
                    cont = '3022'
                elif cont == '623':
                    cont = '6231'

                if invoice.commercial_partner_id.ref_supplier:
                    partner_code = invoice.commercial_partner_id.ref_supplier.zfill(
                        5)
                else:
                    partner_code = ''

                values = {
                    'NR_NIR':
                    10000 +
                    int(''.join([s for s in invoice.number if s.isdigit()])),
                    'NR_INTRARE':
                    invoice.supplier_invoice_number or invoice.number,
                    'GESTIUNE':
                    '',
                    'DEN_GEST':
                    '',
                    'COD':
                    partner_code,
                    'DATA':
                    fields.Date.from_string(invoice.date_invoice),
                    'SCADENT':
                    fields.Date.from_string(invoice.date_due),
                    'TIP':
                    tip,
                    'TVAI':
                    tvai,
                    'DEN_ART':
                    self.unaccent(line.name[:60]),
                    'UM':
                    '',
                    'CANTITATE':
                    line.quantity,
                    'TVA_ART':
                    tva_art,
                    'VALOARE':
                    line.
                    price_subtotal,  #todo: daca pretul include tva valoarea cum o fi ?
                    'TVA':
                    line.price_taxes,
                    'CONT':
                    cont,
                    'PRET_VANZ':
                    0,
                    'GRUPA':
                    '',
                }
                if line.uos_id:
                    values['UM'] = line.uos_id.name[:5].split(' ')[0]

                if not self.export_product:
                    values['COD_ART'] = ''
                    values['DEN_TIP'] = ''
                else:
                    values['COD_ART'] = line.product_id.default_code or '',
                    values['DEN_TIP'] = self.unaccent(
                        line.product_id.categ_id.name[:36])

                intrari_dbf.insert(values)

        for voucher in voucher_in_ids:

            if voucher.tax_id:  # daca este un bon fiscal atunci
                tip = 'C'  # facura simplificata
            else:
                tip = 'B'  # Bon de casa

            if voucher.tax_id:
                tva_art = int(voucher.tax_id[0].amount * 100)
            else:
                tva_art = 0

            for line in voucher.line_ids:

                cont = line.account_id.code
                while cont[-1] == '0':
                    cont = cont[:-1]

                #inlocuire contrui de cheltuiala cu cele de stoc
                if cont == '6028':
                    cont = '3028'
                elif cont == '6022':
                    cont = '3022'
                elif cont == '623':
                    cont = '6231'

                if tva_art == 0:
                    tva = 0
                else:
                    tva = line.amount - line.untax_amount

                if voucher.partner_id.commercial_partner_id.ref_supplier:
                    partner_code = voucher.partner_id.commercial_partner_id.ref_supplier.zfill(
                        5)
                else:
                    partner_code = ''

                values = {
                    'NR_NIR':
                    10000 +
                    int(''.join([s for s in voucher.number if s.isdigit()])),
                    'NR_INTRARE':
                    voucher.reference or voucher.number,
                    'GESTIUNE':
                    '',
                    'DEN_GEST':
                    '',
                    'COD':
                    partner_code,
                    'DATA':
                    fields.Date.from_string(voucher.date),
                    'SCADENT':
                    fields.Date.from_string(voucher.date),
                    'TIP':
                    tip,
                    'TVAI':
                    0,
                    'DEN_ART':
                    '',
                    'UM':
                    '',
                    'CANTITATE':
                    1,
                    'TVA_ART':
                    tva_art,
                    'VALOARE':
                    line.untax_amount or line.
                    amount,  #todo: daca pretul include tva valoarea cum o fi ?
                    'TVA':
                    tva,
                    'CONT':
                    cont,
                    'PRET_VANZ':
                    0,
                    'GRUPA':
                    '',
                }
                if not self.export_product:
                    values['COD_ART'] = ''
                    values['DEN_TIP'] = ''
                else:
                    values['COD_ART'] = line.product_id.default_code or '',
                    values['DEN_TIP'] = self.unaccent(
                        line.product_id.categ_id.name[:36])

                intrari_dbf.insert(values)

        return temp_file, result_html
Exemplo n.º 6
0
    def do_export_clienti(self, partner_ids):
        """
        7. DISCOUNT Numeric 5,2 Procent de discount acordat (optional) 
        8. ADRESA Character 48 Adresa (optional) 
        9. JUDET Character 36 Judeţ (optional) 
        10. BANCA Character 36 Banca (optional) 
        11. CONT_BANCA Character 36 Contul bancar (optional) 
        12. DELEGAT Character 36 Numele şi prenumele delegatului (optional) 
        13. BI_SERIE Character 2 Seria actului de identitate a delegatului (op.) 
        14. BI_NUMAR Character 8 Număr act identitate, a delegatului (optional) 
        15. BI_POL Character 16 Eliberat de... (optional) 
        16. MASINA Character 16 Număr maşină delegat (optional) 
        17. INF_SUPL Character 100 Informaltii care apar pe factura (optional) 
        18. AGENT Character 4 Cod agent (optional) 
        19. DEN_AGENT Character 36 Nume agent (optional) 
        20. GRUPA Character 16 Grupa de client (optional) 
        21. TIP_TERT Character 1 I pt. intracomunitar, E pt. extracomunitari 
        22. TARA Character 2 Codul de tara (RO) 
 
        """
        result_html = ''
        Clienti = {
            'COD': dbf_fields.CharField(max_length=5),  #Cod  
            'DENUMIRE': dbf_fields.CharField(max_length=48),  #Denumire  
            'COD_FISCAL': dbf_fields.CharField(max_length=13),  #Cod Fiscal,   
            'REG_COM': dbf_fields.CharField(
                max_length=16),  #Nr.înregistrare la Registrul Comerţului 
            'ANALITIC': dbf_fields.CharField(max_length=16),  #Cont analitic 
            'ZS': dbf_fields.IntegerField(
                size=3),  #Numeric 3 Zile Scadenţă (optional) 
            'ADRESA': dbf_fields.CharField(max_length=48),  #Adresa (optional) 
            'TARA': dbf_fields.CharField(max_length=2),  #Codul de tara (RO) 
            'TEL':
            dbf_fields.CharField(max_length=20),  #Numar telefon (optional) 
            'EMAIL': dbf_fields.CharField(max_length=100),  #Email (optional) 
            'IS_TVA': dbf_fields.IntegerField(
                size=1),  #Numeric 1 1, dacă este platitor de TVA 
        }
        temp_file = StringIO.StringIO()
        clienti_dbf = base.DBF(temp_file, Clienti)
        for partner in partner_ids:

            if not partner.ref_customer:
                error = _(
                    "Partenerul %s nu are cod de client SAGA") % partner.name
                result_html += '<div>Eroare %s</div>' % error
                if not self.ignore_error:
                    raise Warning(error)

            if partner.is_company:
                if not partner.vat_subjected:
                    cod_fiscal = partner.vat[
                        2:] if partner.vat and partner.vat[:
                                                           2] == 'RO' else partner.vat
                    is_tva = 0
                else:
                    cod_fiscal = partner.vat
                    is_tva = 1
                nrc = partner.nrc
            else:
                is_tva = 0
                cod_fiscal = partner.cnp or partner.nrc
                nrc = ''

            #poate e pusa gresit bifa ca este companie si de fapt e o persoana fizica
            if not cod_fiscal:
                cod_fiscal = partner.cnp or partner.id_nr or partner.nrc

            if partner.ref_customer:
                analitic = '4111.' + partner.ref_customer.zfill(5)
            else:
                analitic = ''

            if partner.ref_customer:
                partner_code = partner.ref_customer.zfill(5)
            else:
                partner_code = ''

            values = {
                'COD': partner_code,
                'DENUMIRE': self.unaccent(partner.name[:48]),
                'COD_FISCAL': cod_fiscal or '',
                'REG_COM': nrc or '',
                'ANALITIC': analitic,
                'ZS': 0,
                'ADRESA': self.unaccent(partner.contact_address[:48]),
                'TARA': partner.country_id.code or '',
                'TEL': partner.phone or '',
                'EMAIL': partner.email or '',
                'IS_TVA': is_tva,
            }
            clienti_dbf.insert(values)

        return temp_file, result_html
Exemplo n.º 7
0
    def do_export(self):

        buff = StringIO.StringIO()

        files = []

        # This is my zip file
        zip_archive = zipfile.ZipFile(buff, mode='w')

        zip_archive.comment = 'Arhiva pentru Mentor'

        partner_ids = self.env['res.partner']
        product_ids = self.env['product.template']
        invoice_in_ids = self.env['account.invoice'].search([
            ('period_id', '=', self.period_id.id),
            ('type', 'in', ['in_invoice', 'in_refund'])
        ])

        for invoice in invoice_in_ids:
            for line in invoice.invoice_line:
                product_ids |= line.product_id.product_tmpl_id

        for invoice in invoice_in_ids:
            partner_ids |= invoice.commercial_partner_id

        invoice_out_ids = self.env['account.invoice'].search([
            ('period_id', '=', self.period_id.id),
            ('type', 'in', ['out_invoice', 'out_refund'])
        ])

        for invoice in invoice_out_ids:
            for line in invoice.invoice_line:
                product_ids |= line.product_id.product_tmpl_id

        for invoice in invoice_out_ids:
            partner_ids |= invoice.commercial_partner_id

        date_start = fields.Date.from_string(self.period_id.date_start)
        date_stop = fields.Date.from_string(self.period_id.date_stop)
        """

        furnizori_file = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'data', 'Furnizori.dbf')
        furnizori_table = dbf.Table(furnizori_file)
        furnizori_table.delete_record()
        furnizori_table.pack()

        
        for partner in partner_ids:
            if partner.supplier:
                furnizori_table.COD = partner.id
                furnizori_table.DENUMIRE = partner.name
                furnizori_table.COD_FISCAL = partner.vat
                furnizori_table.write_record()
        """

        result_html = ' <div>Au fost exportate:</div>'
        result_html += '<div>Facturi de intrare: %s</div>' % str(
            len(invoice_in_ids))
        result_html += '<div>Facturi de iesire %s</div>' % str(
            len(invoice_out_ids))
        result_html += '<div>Produse %s</div>' % str(len(product_ids))
        result_html += '<div>Parteneri %s</div>' % str(len(partner_ids))
        """
Furnizori 
Nr. crt. Nume câmp Tip Mărime câmp Descriere 

7. BANCA Character 48 Banca (optional) 
8. CONT_BANCA Character 36 Contul bancar (optional) 
9. FILIALA Character 36 Filiala Banca (optional) 
10. GRUPA Character 16 Grupa de furnizor (optional) 
11. AGENT Character 4 Cod agent (optional) 
12. DEN_AGENT Character 36 Nume agent (optional) 
13. TIP_TERT Character 1 I pt. intracomunitar, E pt. extracomunitari 
14. TARA Character 2 Codul de tara (RO) 
15. TEL Character 20 Numar telefon (optional) 
16. EMAIL Character 100 Email (optional) 
17. IS_TVA Numeric 1 1, dacă este platitor de TVA 
        """

        Furnizori = {
            'COD': dbf_fields.CharField(max_length=5),  #Cod furnizor 
            'DENUMIRE':
            dbf_fields.CharField(max_length=48),  #Denumire furnizor 
            'COD_FISCAL':
            dbf_fields.CharField(max_length=13),  #Cod Fiscal, furnizor  
            'ANALITIC': dbf_fields.CharField(max_length=16),  #Cont analitic 
            'ZS': dbf_fields.IntegerField(
                size=3),  #Numeric 3 Zile Scadenţă (optional) 
            'ADRESA': dbf_fields.CharField(max_length=48),  #Adresa (optional) 
        }
        temp_file = StringIO.StringIO()
        furnizori_dbf = base.DBF(temp_file, Furnizori)
        for partner in partner_ids:
            if partner.supplier:
                cod_fiscal = partner.vat[
                    2:] if partner.vat[:2] == 'RO' else partner.vat
                values = {
                    'COD': partner.id,
                    'DENUMIRE': partner.name[:48].encode('utf8'),
                    'COD_FISCAL': cod_fiscal,
                    'ANALITIC': partner.property_account_payable.code,
                    'ZS': 0,
                    'ADRESA': partner.contact_address.encode('utf8'),
                }
                furnizori_dbf.insert(values)

        file_name = 'Furnizori_' + date_start.strftime(
            "%d-%m-%Y") + '_' + date_stop.strftime("%d-%m-%Y") + '.dbf'
        zip_archive.writestr(file_name, temp_file.getvalue())
        """


7. DISCOUNT Numeric 5,2 Procent de discount acordat (optional) 
8. ADRESA Character 48 Adresa (optional) 
9. JUDET Character 36 Judeţ (optional) 
10. BANCA Character 36 Banca (optional) 
11. CONT_BANCA Character 36 Contul bancar (optional) 
12. DELEGAT Character 36 Numele şi prenumele delegatului (optional) 
13. BI_SERIE Character 2 Seria actului de identitate a delegatului (op.) 
14. BI_NUMAR Character 8 Număr act identitate, a delegatului (optional) 
15. BI_POL Character 16 Eliberat de... (optional) 
16. MASINA Character 16 Număr maşină delegat (optional) 
17. INF_SUPL Character 100 Informaltii care apar pe factura (optional) 
18. AGENT Character 4 Cod agent (optional) 
19. DEN_AGENT Character 36 Nume agent (optional) 
20. GRUPA Character 16 Grupa de client (optional) 
21. TIP_TERT Character 1 I pt. intracomunitar, E pt. extracomunitari 
22. TARA Character 2 Codul de tara (RO) 
23. TEL Character 20 Numar telefon (optional) 
24. EMAIL Character 100 Email (optional) 
25. IS_TVA Numeric 1 1, dacă este platitor de TVA 
        """
        Clienti = {
            'COD': dbf_fields.CharField(max_length=5),  #Cod  
            'DENUMIRE': dbf_fields.CharField(max_length=48),  #Denumire  
            'COD_FISCAL': dbf_fields.CharField(max_length=13),  #Cod Fiscal,   
            'REG_COM': dbf_fields.CharField(
                max_length=16),  #Nr.înregistrare la Registrul Comerţului 
            'ANALITIC': dbf_fields.CharField(max_length=16),  #Cont analitic 
            'ZS': dbf_fields.IntegerField(
                size=3),  #Numeric 3 Zile Scadenţă (optional) 
            'ADRESA': dbf_fields.CharField(max_length=48),  #Adresa (optional) 
        }
        temp_file = StringIO.StringIO()
        clienti_dbf = base.DBF(temp_file, Clienti)
        for partner in partner_ids:
            if partner.customer:
                cod_fiscal = partner.vat[
                    2:] if partner.vat[:2] == 'RO' else partner.vat
                values = {
                    'COD': partner.id,
                    'DENUMIRE': partner.name[:48].encode('utf8'),
                    'COD_FISCAL': cod_fiscal,
                    'REG_COM': partner.nrc,
                    'ANALITIC': partner.property_account_receivable.code,
                    'ZS': 0,
                    'ADRESA': partner.contact_address[:48].encode('utf8'),
                }
                clienti_dbf.insert(values)

        file_name = 'Clienti_' + date_start.strftime(
            "%d-%m-%Y") + '_' + date_stop.strftime("%d-%m-%Y") + '.dbf'
        zip_archive.writestr(file_name, temp_file.getvalue())
        """
Articole 
Nr. crt. Nume câmp Tip Mărime câmp Descriere 
1. COD Character 16 Cod articol 
2. DENUMIRE Character 60 Denumire articol 
3. UM Character 5 Unitate de masura 
4. TVA Numeric 5,2 Procent TVA articol 
5. TIP* Character 2 Cod tip 
6. DEN_TIP Character 36 Denumire tip 
7. PRET_VANZ Numeric 15,4 Pret de vanzare fara TVA (optional) 
8. PRET_V_TVA Numeric 15,4 Pret de vanzare cu TVA (optional) 
9. COD_BARE Character 16 Cod de bare (optional) 
10. CANT_MIN Numeric 14,3 Stoc minim (optional) 
11. GRUPA Character 16 Grupa de articol (optional) 
        """
        Articole = {
            'COD': dbf_fields.CharField(max_length=16),  #Cod  
            'DENUMIRE': dbf_fields.CharField(max_length=60),  #Denumire 
        }
        temp_file = StringIO.StringIO()
        articole_dbf = base.DBF(temp_file, Articole)
        for product in product_ids:
            values = {
                'COD': product.id,
                'DENUMIRE': product.name[:60],
            }
            articole_dbf.insert(values)

        file_name = 'Articole_' + date_start.strftime(
            "%d-%m-%Y") + '_' + date_stop.strftime("%d-%m-%Y") + '.dbf'
        zip_archive.writestr(file_name, temp_file.getvalue())
        """
<Factura>
      <Antet>
            <FurnizorNume>   
            <FurnizorCIF>
            <FurnizorNrRegCom>
            <FurnizorCapital>
            <FurnizorAdresa>
            <FurnizorBanca>
            <FurnizorIBAN>
            <FurnizorInformatiiSuplimentare>
            <ClientNume>
            <ClientInformatiiSuplimentare>
            <ClientCIF>
            <ClientNrRegCom>
            <ClientAdresa>
            <ClientBanca>
            <ClientIBAN>
            <FacturaNumar>
            <FacturaData>
            <FacturaScadenta>
            <FacturaTaxareInversa> (Da/Nu)
            <FacturaTVAIncasare> (Da/Nu)
            <FacturaInformatiiSuplimentare>             <FacturaMoneda>
            <FacturaCotaTVA>
            <FacturaGreutate>
      </Antet>
      <Detalii>
            <Continut>
                  <Linie>
                        <LinieNrCrt>
                        <Gestiune>  (Optional)
                        <Descriere>
                        <CodArticolFurnizor>
                        <CodArticolClient>
                        <CodBare>
                        <InformatiiSuplimentare>
                        <UM>
                        <Cantitate>
                        <Pret>
                        <Valoare>
                        <TVA>
                  </Linie>
                  .......
                  <Linie>
                  .......
                  </Linie>
            </Continut>
      </Detalii>
      <Sumar>
            <TotalValoare>
            <TotalTVA>
            <Total>
      </Sumar>
      <Observatii>
            <txtObservatii>
            <SoldClient>
      </Observatii>
</Factura>
        
        """

        zip_archive.close()
        out = base64.encodestring(buff.getvalue())
        buff.close()

        filename = 'ExportOdoo' + self.period_id.name
        extension = 'zip'

        name = "%s.%s" % (filename, extension)
        self.write({
            'state': 'get',
            'data_file': out,
            'name': name,
            'result': result_html
        })

        return {
            'type': 'ir.actions.act_window',
            'res_model': 'export.saga',
            'view_mode': 'form',
            'view_type': 'form',
            'res_id': self.id,
            'views': [(False, 'form')],
            'target': 'new',
        }