Se rendre au contenu
Menu
Cette question a été signalée
3 Réponses
2360 Vues
Hello, how could I add a button to my invoice form that would allow me to import from a csv file the lines with the products that the invoice will refer to without leaving the form?


Avatar
Ignorer
Meilleure réponse

hello  *Danny
please go though this video it wil help you on Csv/Xlsx file import using button, here is the referance.
https://www.youtube.com/watch?v=KsjaQnXahqU

Avatar
Ignorer
Meilleure réponse

Hi  Danny Gonzalez,

I think this video can help you: https://www.youtube.com/watch?v=UOBxxnYDIsM&list=PLSKcWRTtEl5qzvRaI-VTGavfReiHS_EEb&index=1

Avatar
Ignorer
Meilleure réponse

Hi,

In your Button action you can write this code based on your file you can change the record position
This example for XLSX you can try on this method to import the CSV file
class ImportLines(models.Model):
    _name = 'import.lines'

    xls_file = fields.Binary('File')

    def import_xls(self):
        """  Import xlsx report to Invoice line """
        wb = openpyxl.load_workbook(
            filename=BytesIO(base64.b64decode(self.xls_file)),
            read_only=True
        )
        ws = wb.active
        for record in ws.iter_rows(min_row=2, max_row=None, min_col=None,
                                   max_col=None, values_only=True):
            active_id = self.env.context.get('active_id')
            product = record[2]
            if product:
                val = product.split()
            # pro = val[0]
                string = re.sub("[\([{})\]]", "", val[0])
                new = self.env['account.move'].create({
                    'product_id': active_id,
                    'display_type': False,
                    'product_id':  self.env['product.product'].search([
                                ('default_code', '=', string)]).id,
                    'name': record[0],
                    'qyanity': record[1],
                    'price_unit': record[3],
                    'product_uom_id':  self.env['uom.uom'].search([
                                ('name', '=', record[4])]).id
                })

if you used csv file

buffer = tempfile.NamedTemporaryFile(delete=False, suffix=".xlsx")
        buffer.write(binascii.a2b_base64(self.file))
        buffer.seek(0)
        book = xlrd.open_workbook(buffer.name)
        sheet = book.sheet_by_index(0)
        for row_no in range(sheet.nrows):
            if row_no <= 0:
                fields = map(lambda row: row.value.encode('utf-8'),
                             sheet.row(row_no))
            else:
                line = list(
                    map(lambda row: isinstance(row.value,
                                               bytes) and row.value.encode(
                        'utf-8') or str(row.value),
                        sheet.row(row_no)))
                       
                       
              Try this code and based on  your field value you can find the record details Use the above code you can create invoice lines


Hope it helps

Avatar
Ignorer
Publications associées Réponses Vues Activité
4
août 24
2223
1
juil. 22
1539
2
mai 25
740
2
mars 24
3051
1
oct. 22
4024