summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xindoteknik_custom/__manifest__.py5
-rwxr-xr-xindoteknik_custom/models/__init__.py1
-rw-r--r--indoteknik_custom/models/kartu_stock.py186
-rw-r--r--indoteknik_custom/models/keywords.py2
-rw-r--r--indoteknik_custom/views/kartu_stock.xml17
5 files changed, 208 insertions, 3 deletions
diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py
index 36588967..3e39942b 100755
--- a/indoteknik_custom/__manifest__.py
+++ b/indoteknik_custom/__manifest__.py
@@ -8,7 +8,7 @@
'author': 'Rafi Zadanly',
'website': '',
'images': ['assets/favicon.ico'],
- 'depends': ['base', 'coupon', 'delivery', 'sale', 'sale_management', 'vit_kelurahan', 'vit_efaktur'],
+ 'depends': ['base', 'coupon', 'delivery', 'sale', 'sale_management', 'vit_kelurahan', 'vit_efaktur', 'proweb_kartu_stok'],
'data': [
'views/assets.xml',
'security/ir.model.access.csv',
@@ -191,7 +191,8 @@
'views/uom_uom.xml',
'views/update_depreciation_move_wizard_view.xml',
'views/commission_internal.xml',
- 'views/keywords.xml'
+ 'views/keywords.xml',
+ 'views/kartu_stock.xml',
],
'demo': [],
'css': [],
diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py
index a042750b..840796f8 100755
--- a/indoteknik_custom/models/__init__.py
+++ b/indoteknik_custom/models/__init__.py
@@ -167,3 +167,4 @@ from . import uom_uom
from . import commission_internal
from . import update_depreciation_move_wizard
from . import keywords
+from . import kartu_stock
diff --git a/indoteknik_custom/models/kartu_stock.py b/indoteknik_custom/models/kartu_stock.py
new file mode 100644
index 00000000..22f90df0
--- /dev/null
+++ b/indoteknik_custom/models/kartu_stock.py
@@ -0,0 +1,186 @@
+from odoo import models
+from io import BytesIO
+import datetime
+from base64 import encodebytes
+import xlsxwriter
+
+
+class KartuStokWizardInherit(models.TransientModel):
+ _inherit = 'kartu.stok.wizard'
+
+
+ def action_kartu_stok_excel_single_sheet(self):
+
+ active_ids_tmp = self.env.context.get('active_ids')
+ active_model = self.env.context.get('active_model')
+
+ if active_model == 'product.template':
+ active_ids = self.env['product.product'].search(
+ [('product_tmpl_id', 'in', active_ids_tmp),
+ ('active', '=', True)]).ids
+ else:
+ active_ids = active_ids_tmp
+
+ data = {
+ 'location_id': self.location_id.id,
+ 'day_date': self.day_date,
+ 'previous_number_days': self.previous_number_days,
+ 'date_from': self.date_from,
+ 'date_to': self.date_to,
+ 'ids': active_ids,
+ 'context': {'active_model': active_model}
+ }
+
+ file_io = BytesIO()
+ workbook = xlsxwriter.Workbook(file_io)
+
+ self.generate_xlsx_single_sheet(workbook, data)
+
+ workbook.close()
+
+ fout = encodebytes(file_io.getvalue())
+ datetime_string = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
+ filename = f'Kartu_Stok_Single_{datetime_string}.xlsx'
+
+ self.write({
+ 'fileout': fout,
+ 'fileout_filename': filename
+ })
+
+ file_io.close()
+
+ return {
+ 'type': 'ir.actions.act_url',
+ 'target': 'new',
+ 'url': 'web/content/?model=' + self._name +
+ '&id=' + str(self.id) +
+ '&field=fileout&download=true&filename=' + filename,
+ }
+
+ def generate_xlsx_single_sheet(self, workbook, data):
+
+ bold = workbook.add_format({'bold': True})
+ border_date_right = workbook.add_format({'border':1, 'num_format': 'DD-MM', 'bg_color': '#dddddd', 'align': 'right'})
+ border_int_right = workbook.add_format({'border':1, 'num_format': '#,##0', 'bg_color': '#dddddd', 'align': 'right'})
+ border_int_right_bold = workbook.add_format({'border':1, 'num_format': '#,##0', 'bg_color': '#dddddd', 'align': 'right', 'bold': True})
+ border_text_center = workbook.add_format({'border':1, 'bg_color': '#dddddd', 'align': 'center'})
+ header_format = workbook.add_format({'bold': True, 'border':1, 'bg_color': '#808080', 'align': 'center'})
+
+ sheet = workbook.add_worksheet('Kartu Stok')
+
+ docs = self.env['product.product'].browse(data['ids'])
+ location = self.env['stock.location'].browse(data['location_id'])
+ location_name = location.display_name.split('/')[0]
+
+ row = 0
+
+ for doc in docs:
+
+ # =========================
+ # HEADER PRODUCT
+ # =========================
+ sheet.write(row, 0, doc.display_name, bold)
+ row += 1
+ sheet.write(row, 0, location_name, bold)
+ row += 2
+
+ # =========================
+ # TABLE HEADER
+ # =========================
+ sheet.write(row, 0, 'Date', header_format)
+ sheet.write(row, 1, 'In', header_format)
+ sheet.write(row, 2, 'Out', header_format)
+ sheet.write(row, 3, 'Stock', header_format)
+ sheet.write(row, 4, 'Distributor', header_format)
+ sheet.write(row, 5, 'Buyer', header_format)
+ sheet.write(row, 6, 'Document', header_format)
+ sheet.write(row, 7, 'Source Document', header_format)
+ row += 1
+
+ stock_total = 0
+ stock_show_initial = False
+
+ # =========================
+ # MOVE LOOP (SAMA LOGIC ASLI)
+ # =========================
+ for move in doc.stock_move_ids.sorted(key=lambda sm: sm.date):
+ for line in move.move_line_ids:
+
+ if line.state != 'done':
+ continue
+
+ if line.location_id.id != data['location_id'] and \
+ line.location_dest_id.id != data['location_id']:
+ continue
+
+ if not stock_show_initial:
+ sheet.write(row, 3, stock_total, border_int_right_bold)
+ sheet.write(row, 4, 'Initial Stock', border_text_center)
+ stock_show_initial = True
+ row += 1
+
+ qty_in = 0
+ qty_out = 0
+
+ if line.location_dest_id.id == data['location_id']:
+ qty_in = line.qty_done
+ stock_total += qty_in
+
+ if line.location_id.id == data['location_id']:
+ qty_out = line.qty_done
+ stock_total -= qty_out
+
+ sheet.write(row, 0, line.date, border_date_right)
+ sheet.write(row, 1, qty_in, border_int_right)
+ sheet.write(row, 2, qty_out, border_int_right)
+ sheet.write(row, 3, stock_total, border_int_right)
+ # Distributor
+ col = 4
+ if line.location_dest_id.id == data['location_id']:
+ if line.picking_id and line.picking_id.origin:
+ sheet.write(row, col, line.picking_id.partner_id.display_name, border_text_center)
+ else:
+ if line.location_id:
+ if line.location_id.name == 'Inventory adjustment':
+ sheet.write(row, col, 'Adjust *', border_text_center)
+ else:
+ sheet.write(row, col, line.location_id.location_id.name + ' *', border_text_center)
+ else:
+ sheet.write(row, col, doc.seller_ids[0].name + ' *' if doc.seller_ids else '', border_text_center)
+ else:
+ sheet.write(row, col, '', border_text_center)
+ # Buyer
+ col = 5
+ if line.location_id.id == data['location_id']:
+ if line.picking_id and line.picking_id.origin:
+ sheet.write(row, col, line.picking_id.partner_id.display_name, border_text_center)
+ else:
+ if line.location_dest_id:
+ if line.location_dest_id.name == 'Inventory adjustment':
+ sheet.write(row, col, 'Adjust *', border_text_center)
+ else:
+ sheet.write(row, col, line.location_dest_id.location_id.name + ' *', border_text_center)
+ else:
+ sheet.write(row, col, doc.seller_ids[0].name + ' *' if doc.seller_ids else '', border_text_center)
+ else:
+ sheet.write(row, col, '', border_text_center)
+ # Document
+ col = 6
+ if line.picking_id and line.picking_id.origin:
+ sheet.write(row, col, line.picking_id.name, border_text_center)
+ else:
+ sheet.write(row, col, line.reference or '', border_text_center)
+ # Source Document
+ col = 7
+ if line.picking_id and line.picking_id.origin:
+ sheet.write(row, col, line.picking_id.origin, border_text_center)
+ else:
+ sheet.write(row, col, line.reference or '', border_text_center)
+
+ row += 1
+
+ row += 3 # jarak antar product
+
+
+
+
diff --git a/indoteknik_custom/models/keywords.py b/indoteknik_custom/models/keywords.py
index 4ab649dc..5b7da705 100644
--- a/indoteknik_custom/models/keywords.py
+++ b/indoteknik_custom/models/keywords.py
@@ -225,7 +225,7 @@ class Keywords(models.Model):
tracked_fields = ['keywords', 'category_id', 'product_ids']
neded_sync = any(field in vals for field in tracked_fields)
- if neded_sync and self.skip == False:
+ if neded_sync and self.skip == False and len(self.product_ids) > 0:
for record in self:
record.solr_flag = 2
diff --git a/indoteknik_custom/views/kartu_stock.xml b/indoteknik_custom/views/kartu_stock.xml
new file mode 100644
index 00000000..705d86a2
--- /dev/null
+++ b/indoteknik_custom/views/kartu_stock.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<odoo>
+ <data>
+ <record id="kartu_stok_wizard_form_inherit_single_excel" model="ir.ui.view">
+ <field name="name">kartu.stok.wizard.form.inherit.single.excel</field>
+ <field name="model">kartu.stok.wizard</field>
+ <field name="inherit_id" ref="proweb_kartu_stok.print_kartu_stok_view_form"/>
+ <field name="arch" type="xml">
+ <xpath expr="//footer" position="inside">
+
+ <button name="action_kartu_stok_excel_single_sheet" type="object" string="Print Excel (Single Sheet)" class="btn-primary"/>
+
+ </xpath>
+ </field>
+ </record>
+ </data>
+</odoo> \ No newline at end of file