Skip to Content
मेन्यू
This question has been flagged
3 Replies
2278 Views
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
Discard
Best Answer

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
Discard
Best Answer

Hi  Danny Gonzalez,

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

Avatar
Discard
Best Answer

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
Discard
Related Posts Replies Views Activity
4
अग॰ 24
2181
1
जुल॰ 22
1468
2
मई 25
703
2
मार्च 24
2908
1
अक्तू॰ 22
3962