summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2022-09-19 11:07:17 +0700
committerIT Fixcomart <it@fixcomart.co.id>2022-09-19 11:07:17 +0700
commitde08a79ca870602ec45f396a8476cfdc3c38aee6 (patch)
treeb92fb1affefe2579a87edd195fe34f2d8c1ca50d
parent68cb8eaa625b9c96de7aeb9fc45c1db81921661e (diff)
parentb1c1914eafc652711633f6f11b096a2013cad7e2 (diff)
Merge & fix conflicts
-rwxr-xr-xindoteknik_custom/__manifest__.py1
-rwxr-xr-xindoteknik_custom/models/__init__.py1
-rw-r--r--indoteknik_custom/models/delivery_order.py100
-rwxr-xr-xindoteknik_custom/models/sale_order.py1
-rw-r--r--indoteknik_custom/models/stock_picking.py58
-rwxr-xr-xindoteknik_custom/security/ir.model.access.csv4
-rw-r--r--indoteknik_custom/views/delivery_order.xml50
-rw-r--r--indoteknik_custom/views/ir_sequence.xml30
-rwxr-xr-xindoteknik_custom/views/sale_order.xml9
-rw-r--r--indoteknik_custom/views/stock_picking.xml24
10 files changed, 259 insertions, 19 deletions
diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py
index 7baa89c3..937fb0c9 100755
--- a/indoteknik_custom/__manifest__.py
+++ b/indoteknik_custom/__manifest__.py
@@ -13,6 +13,7 @@
'security/ir.model.access.csv',
'views/blog_post.xml',
'views/coupon_program.xml',
+ 'views/delivery_order.xml',
'views/product_public_category.xml',
'views/product_template.xml',
'views/purchase_order.xml',
diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py
index 6407387c..e4913205 100755
--- a/indoteknik_custom/models/__init__.py
+++ b/indoteknik_custom/models/__init__.py
@@ -23,3 +23,4 @@ from . import blog_post
from . import stock_move
from . import stock_picking
from . import stock_picking_type
+from . import delivery_order
diff --git a/indoteknik_custom/models/delivery_order.py b/indoteknik_custom/models/delivery_order.py
new file mode 100644
index 00000000..06cdd878
--- /dev/null
+++ b/indoteknik_custom/models/delivery_order.py
@@ -0,0 +1,100 @@
+from odoo import models, fields, api
+from odoo.exceptions import UserError
+from pytz import timezone
+from datetime import datetime
+
+
+class DeliveryOrder(models.TransientModel):
+ _name = 'delivery.order'
+
+ name = fields.Char(string='Name', default='Delivery Order')
+ delivery_order_line_ids = fields.One2many(
+ comodel_name='delivery.order.line',
+ inverse_name='delivery_order_id',
+ string='Delivery Order Line'
+ )
+
+ @api.model
+ def create(self, vals):
+ current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+
+ if len(vals['delivery_order_line_ids']) < 1:
+ raise UserError('Delivery Order harus di-isi sebelum melanjutkan')
+
+ for delivery_order_line in vals['delivery_order_line_ids']:
+ picking = False
+ if delivery_order_line[2]['name']:
+ picking = self.env['stock.picking'].search([('picking_code', '=', delivery_order_line[2]['name'])], limit=1)
+
+ if picking:
+ if not picking.driver_id:
+ picking.driver_id = self.env.uid
+ picking.delivery_tracking_no = delivery_order_line[2]['tracking_no']
+
+ delivery_type = self.env['delivery.order.line'].get_delivery_type(picking.driver_departure_date, picking.driver_arrival_date)
+ if delivery_type == 'departure':
+ picking.driver_departure_date = current_time
+ elif delivery_type == 'arrival':
+ picking.driver_arrival_date = current_time
+ return super(DeliveryOrder, self).create(vals)
+
+ def save_delivery(self):
+ self.ensure_one()
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'display_notification',
+ 'params': {
+ 'title': 'Notification',
+ 'message': 'Delivery Order berhasil disimpan',
+ 'next': {'type': 'ir.actions.act_window_close'},
+ }
+ }
+
+
+class DeliveryOrderLine(models.TransientModel):
+ _name = 'delivery.order.line'
+
+ name = fields.Char(string='DO Number')
+ driver_id = fields.Many2one(comodel_name='res.users', string='Driver')
+ departure_date = fields.Char(string='Departure Date')
+ arrival_date = fields.Char(string='Arrival Date')
+ tracking_no = fields.Char(string='Tracking No')
+ delivery_order_id = fields.Many2one('delivery.order', string='Delivery Order')
+
+ @api.onchange('name')
+ def onchange_name(self):
+ current_time = datetime.now(timezone('Asia/Jakarta')).strftime('%Y-%m-%d %H:%M:%S')
+
+ if self.name:
+ if len(self.name) == 13:
+ self.name = self.name[:-1]
+ picking = self.env['stock.picking'].search([('picking_code', '=', self.name)], limit=1)
+ if picking:
+ if picking.driver_id:
+ self.driver_id = picking.driver_id
+ else:
+ self.driver_id = self.env.uid
+
+ self.tracking_no = picking.delivery_tracking_no
+
+ delivery_type = self.get_delivery_type(picking.driver_departure_date, picking.driver_arrival_date)
+ if delivery_type != 'departure':
+ self.departure_date = picking.driver_departure_date.astimezone(timezone('Asia/Jakarta')).strftime('%Y-%m-%d %H:%M:%S')
+
+ if delivery_type == 'departure':
+ self.departure_date = current_time
+ elif delivery_type == 'arrival':
+ self.arrival_date = current_time
+ else:
+ self.arrival_date = picking.driver_arrival_date.astimezone(timezone('Asia/Jakarta')).strftime('%Y-%m-%d %H:%M:%S')
+ else:
+ raise UserError('Nomor DO tidak ditemukan')
+
+ def get_delivery_type(self, driver_departure_date, driver_arrival_date):
+ delivery_type = 'departure'
+ if driver_departure_date:
+ delivery_type = 'arrival'
+ if driver_arrival_date:
+ delivery_type = False
+
+ return delivery_type
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 57a4921e..1db8a445 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -17,6 +17,7 @@ class SaleOrder(models.Model):
('pengajuan2', 'Approval Tyas'),
('approved', 'Approved'),
], string='Approval Status', readonly=True, copy=False, index=True, tracking=3)
+ carrier_id = fields.Many2one('delivery.carrier', string='Shipping Method')
have_visit_service = fields.Boolean(string='Have Visit Service', help='To compute is customer get visit service', compute='_compute_have_visit_service')
def _compute_have_visit_service(self):
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py
index 3c39e769..a0b7c15e 100644
--- a/indoteknik_custom/models/stock_picking.py
+++ b/indoteknik_custom/models/stock_picking.py
@@ -6,10 +6,37 @@ class StockPicking(models.Model):
_inherit = 'stock.picking'
is_internal_use = fields.Boolean('Internal Use', help='flag which is internal use or not')
account_id = fields.Many2one('account.account', string='Account')
+ efaktur_id = fields.Many2one('vit.efaktur', string='Faktur Pajak')
+ is_efaktur_exported = fields.Boolean(string='Is eFaktur Exported')
+ date_efaktur_exported = fields.Datetime(string='eFaktur Exported Date')
- # efaktur_id = fields.Many2one('vit.efaktur', string='Faktur Pajak')
- # is_efaktur_exported = fields.Boolean(string='Is eFaktur Exported')
- # date_efaktur_exported = fields.Datetime(string='eFaktur Exported Date')
+ # Delivery Order
+ driver_departure_date = fields.Datetime(
+ string='Driver Departure Date',
+ readonly=True,
+ copy=False
+ )
+ driver_arrival_date = fields.Datetime(
+ string='Driver Arrival Date',
+ readonly=True,
+ copy=False
+ )
+ delivery_tracking_no = fields.Char(
+ string='Delivery Tracking Number',
+ readonly=True,
+ copy=False
+ )
+ driver_id = fields.Many2one(
+ comodel_name='res.users',
+ string='Driver',
+ readonly=True,
+ copy=False
+ )
+ picking_code = fields.Char(
+ string="Picking Code",
+ readonly=True,
+ copy=False
+ )
@api.onchange('picking_type_id')
def _onchange_operation_type(self):
@@ -21,3 +48,28 @@ class StockPicking(models.Model):
raise UserError(_('Tidak bisa Validate jika tidak dari Document SO / PO'))
res = super(StockPicking, self).button_validate()
return res
+
+ @api.model
+ def create(self, vals):
+ if not self.picking_code:
+ vals['picking_code'] = self.env['ir.sequence'].next_by_code('stock.picking.code') or '0'
+
+ self._use_faktur(vals)
+ return super(StockPicking, self).create(vals)
+
+ def write(self, vals):
+ self._use_faktur(vals)
+ return super(StockPicking, self).write(vals)
+
+ def _use_faktur(self, vals):
+ if vals.get('efaktur_id', False):
+ self.env['vit.efaktur'].search(
+ [
+ ('id', '=', vals['efaktur_id'])
+ ],
+ limit=1
+ ).is_used = True
+
+ if self.efaktur_id.id != vals['efaktur_id']:
+ self.efaktur_id.is_used = False
+ return True
diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv
index 08d8b519..78e56b30 100755
--- a/indoteknik_custom/security/ir.model.access.csv
+++ b/indoteknik_custom/security/ir.model.access.csv
@@ -9,4 +9,6 @@ access_stock_vendor,access.stock.vendor,model_stock_vendor,,1,1,1,1
access_user_activity_log,access.user.activity.log,model_user_activity_log,,1,1,1,1
access_purchase_pricelist,access.purchase.pricelist,model_purchase_pricelist,,1,1,1,1
access_sale_monitoring,access.sale.monitoring,model_sale_monitoring,,1,1,1,1
-access_sale_monitoring_detail,access.sale.monitoring.detail,model_sale_monitoring_detail,,1,1,1,1 \ No newline at end of file
+access_sale_monitoring_detail,access.sale.monitoring.detail,model_sale_monitoring_detail,,1,1,1,1
+access_delivery_order,access.delivery.order,model_delivery_order,,1,1,1,1
+access_delivery_order_line,access.delivery.order.line,model_delivery_order_line,,1,1,1,1 \ No newline at end of file
diff --git a/indoteknik_custom/views/delivery_order.xml b/indoteknik_custom/views/delivery_order.xml
new file mode 100644
index 00000000..da6a571c
--- /dev/null
+++ b/indoteknik_custom/views/delivery_order.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+ <record id="view_delivery_order_form" model="ir.ui.view">
+ <field name="name">Delivery Order</field>
+ <field name="model">delivery.order</field>
+ <field name="arch" type="xml">
+ <form>
+ <sheet>
+ <field name="name" invisible="1"/>
+ <field
+ name="delivery_order_line_ids"
+ mode="tree"
+ >
+ <tree editable="bottom">
+ <control>
+ <create name="add_delivery_order_line_control" string="Add a delivery"/>
+ </control>
+ <field name="name" required="1"/>
+ <field name="driver_id" readonly="1"/>
+ <field name="departure_date" readonly="1"/>
+ <field name="arrival_date" readonly="1"/>
+ <field name="tracking_no"/>
+ </tree>
+ </field>
+ </sheet>
+ <footer>
+ <button name="save_delivery" string="Submit" type="object" default_focus="1" class="oe_highlight"/>
+ <button string="Cancel" class="btn btn-secondary" special="cancel" />
+ </footer>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_delivery_order" model="ir.actions.act_window">
+ <field name="name">Delivery Order</field>
+ <field name="res_model">delivery.order</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="view_mode">form</field>
+ <field name="view_id" ref="view_delivery_order_form"/>
+ <field name="target">new</field>
+ </record>
+
+ <menuitem
+ action="action_delivery_order"
+ id="delivery_order"
+ parent="stock.menu_stock_warehouse_mgmt"
+ name="Delivery Order"
+ sequence="1"
+ />
+</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/ir_sequence.xml b/indoteknik_custom/views/ir_sequence.xml
index 9e057c0d..754457da 100644
--- a/indoteknik_custom/views/ir_sequence.xml
+++ b/indoteknik_custom/views/ir_sequence.xml
@@ -1,12 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
- <record id="sequence_internal_use" model="ir.sequence">
- <field name="name">Internal Use</field>
- <field name="code">internal.use</field>
- <field name="active">TRUE</field>
- <field name="prefix">IU/%(year)s/</field>
- <field name="padding">5</field>
- <field name="number_next">1</field>
- <field name="number_increment">1</field>
- </record>
+ <data noupdate="1">
+ <record id="sequence_internal_use" model="ir.sequence">
+ <field name="name">Internal Use</field>
+ <field name="code">internal.use</field>
+ <field name="active">TRUE</field>
+ <field name="prefix">IU/%(year)s/</field>
+ <field name="padding">5</field>
+ <field name="number_next">1</field>
+ <field name="number_increment">1</field>
+ </record>
+
+ <record id="sequence_stock_picking_code" model="ir.sequence">
+ <field name="name">Stock Picking Code</field>
+ <field name="code">stock.picking.code</field>
+ <field name="active">TRUE</field>
+ <field name="prefix">1%(y)s%(month)s</field>
+ <field name="padding">5</field>
+ <field name="number_next">1</field>
+ <field name="number_increment">1</field>
+ </record>
+ </data>
</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml
index 82058837..19182a6b 100755
--- a/indoteknik_custom/views/sale_order.xml
+++ b/indoteknik_custom/views/sale_order.xml
@@ -6,12 +6,6 @@
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
- <button id="action_confirm" position="after">
-<!-- <button name="sale_order_approve"-->
-<!-- string="Ask Approval"-->
-<!-- type="object"-->
-<!-- />-->
- </button>
<field name="payment_term_id" position="after">
<field name="approval_status" />
</field>
@@ -23,6 +17,9 @@
<field name="total_margin" groups="sales_team.group_sale_manager"/>
<field name="total_percent_margin" groups="sales_team.group_sale_manager"/>
</field>
+ <field name="effective_date" position="after">
+ <field name="carrier_id"/>
+ </field>
</field>
</record>
</data>
diff --git a/indoteknik_custom/views/stock_picking.xml b/indoteknik_custom/views/stock_picking.xml
index 9081a58e..6ad2e4cd 100644
--- a/indoteknik_custom/views/stock_picking.xml
+++ b/indoteknik_custom/views/stock_picking.xml
@@ -23,6 +23,30 @@
}"
/>
</field>
+
+ <page name="note" position="after">
+ <page string="E-Faktur" name="efaktur" attrs="{'invisible': [['is_internal_use', '=', False]]}">
+ <group>
+ <group>
+ <field name="efaktur_id" domain="[('is_used','=',False)]"/>
+ <field name="is_efaktur_exported"/>
+ <field name="date_efaktur_exported"/>
+ </group>
+ </group>
+ </page>
+ <page string="Delivery" name="delivery_order">
+ <group>
+ <group>
+ <field name="driver_departure_date"/>
+ <field name="driver_arrival_date"/>
+ <field name="delivery_tracking_no"/>
+ <field name="driver_id"/>
+ <field name="picking_code"/>
+ </group>
+ </group>
+ </page>
+ </page>
+
</field>
</record>
</data>