summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-10-02 10:40:24 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-10-02 10:40:24 +0700
commit705f51eed8a817fe6ea3ef514402786d25f7c356 (patch)
treeb756a2ed1a1ef106739e935ce0ac47df12df473a
parent37ee561ff633776ef984d4d9e441981aecbca762 (diff)
parent1754a77d402af8c9fccb896e0b0745eb6e591c0b (diff)
Merge branch 'production' into iman/switch-account
-rw-r--r--indoteknik_api/controllers/api_v1/user.py1
-rw-r--r--indoteknik_custom/models/account_move_due_extension.py2
-rw-r--r--indoteknik_custom/models/res_partner.py53
-rw-r--r--indoteknik_custom/models/stock_picking.py4
-rw-r--r--indoteknik_custom/models/website_user_cart.py22
-rw-r--r--indoteknik_custom/views/account_move_views.xml248
-rwxr-xr-xindoteknik_custom/views/website_user_cart.xml7
7 files changed, 225 insertions, 112 deletions
diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py
index 8a9d8f68..bcced998 100644
--- a/indoteknik_api/controllers/api_v1/user.py
+++ b/indoteknik_api/controllers/api_v1/user.py
@@ -93,6 +93,7 @@ class User(controller.Controller):
}
user = request.env['res.users'].create(user_data)
+ user.partner_id.email = email
data = {
'is_auth': True,
diff --git a/indoteknik_custom/models/account_move_due_extension.py b/indoteknik_custom/models/account_move_due_extension.py
index 0399c6a2..23f8888c 100644
--- a/indoteknik_custom/models/account_move_due_extension.py
+++ b/indoteknik_custom/models/account_move_due_extension.py
@@ -96,6 +96,8 @@ class DueExtension(models.Model):
sales.action_confirm()
self.order_id.due_id = self.id
+ template = self.env.ref('indoteknik_custom.mail_template_due_extension_approve')
+ template.send_mail(self.id, force_send=True)
def generate_due_line(self):
partners = self.partner_id.get_child_ids()
diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py
index ef857c55..2846c14b 100644
--- a/indoteknik_custom/models/res_partner.py
+++ b/indoteknik_custom/models/res_partner.py
@@ -85,15 +85,54 @@ class ResPartner(models.Model):
#
return res
- # def write(self, vals):
- # if self.company_type == 'person':
+ def write(self, vals):
+ # Fungsi rekursif untuk meng-update semua child, termasuk child dari child
+ def update_children_recursively(partner, vals_for_child):
+ # Lakukan update pada partner saat ini hanya dengan field yang diizinkan
+ partner.write(vals_for_child)
+
+ # Untuk setiap child dari partner ini, update juga child-nya
+ for child in partner.child_ids:
+ update_children_recursively(child, vals_for_child)
+
+ # Jika self tidak memiliki parent_id, artinya self adalah parent
+ if not self.parent_id:
+ # Ambil semua child dari parent ini
+ children = self.child_ids
+
+ # Perbarui vals dengan nilai dari parent jika tidak ada dalam vals
+ vals['customer_type'] = vals.get('customer_type', self.customer_type)
+ vals['nama_wajib_pajak'] = vals.get('nama_wajib_pajak', self.nama_wajib_pajak)
+ vals['npwp'] = vals.get('npwp', self.npwp)
+ vals['sppkp'] = vals.get('sppkp', self.sppkp)
+ vals['alamat_lengkap_text'] = vals.get('alamat_lengkap_text', self.alamat_lengkap_text)
+ vals['industry_id'] = vals.get('industry_id', self.industry_id.id if self.industry_id else None)
+ vals['company_type_id'] = vals.get('company_type_id',
+ self.company_type_id.id if self.company_type_id else None)
+
+ # Simpan hanya field yang perlu di-update pada child
+ vals_for_child = {
+ 'customer_type': vals.get('customer_type'),
+ 'nama_wajib_pajak': vals.get('nama_wajib_pajak'),
+ 'npwp': vals.get('npwp'),
+ 'sppkp': vals.get('sppkp'),
+ 'alamat_lengkap_text': vals.get('alamat_lengkap_text'),
+ 'industry_id': vals.get('industry_id'),
+ 'company_type_id': vals.get('company_type_id')
+ }
+
+ # Lakukan update pada semua child secara rekursif
+ for child in children:
+ update_children_recursively(child, vals_for_child)
+
+ # Lakukan write untuk parent dengan vals asli
+ res = super(ResPartner, self).write(vals)
+
+ return res
+
+ # if self.company_type == 'person' and not partner.parent_id:
# if self.parent_id:
# parent = self.parent_id
- # vals['customer_type'] = parent.customer_type
- # vals['nama_wajib_pajak'] = parent.nama_wajib_pajak
- # vals['npwp'] = parent.npwp
- # vals['sppkp'] = parent.sppkp
- # vals['alamat_lengkap_text'] = parent.alamat_lengkap_text
# vals['industry_id'] = parent.industry_id.id
# vals['company_type_id'] = parent.company_type_id.id
#
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py
index 66a326ff..6f038386 100644
--- a/indoteknik_custom/models/stock_picking.py
+++ b/indoteknik_custom/models/stock_picking.py
@@ -406,6 +406,10 @@ class StockPicking(models.Model):
if product:
product.product_tmpl_id._create_solr_queue('_sync_product_stock_to_solr')
+ for move_line in self.move_line_ids_without_package:
+ if move_line.product_id:
+ move_line.product_id.product_tmpl_id._create_solr_queue('_sync_product_stock_to_solr')
+
if not self.date_reserved:
current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
self.date_reserved = current_time
diff --git a/indoteknik_custom/models/website_user_cart.py b/indoteknik_custom/models/website_user_cart.py
index b0cf47f7..169f4a6b 100644
--- a/indoteknik_custom/models/website_user_cart.py
+++ b/indoteknik_custom/models/website_user_cart.py
@@ -1,4 +1,4 @@
-from odoo import fields, models
+from odoo import fields, models, api
from datetime import datetime, timedelta
class WebsiteUserCart(models.Model):
@@ -16,6 +16,26 @@ class WebsiteUserCart(models.Model):
], 'Source', default='add_to_cart')
user_other_carts = fields.One2many('website.user.cart', 'id', 'Other Products', compute='_compute_user_other_carts')
is_reminder = fields.Boolean(string='Reminder?')
+ phone_user = fields.Char(string='Phone', related='user_id.mobile')
+ price = fields.Float(string='Price', compute='_compute_price')
+ program_product_id = fields.Many2one('product.product', string='Program Products', compute='_compute_program_product_ids')
+
+ @api.depends('program_line_id')
+ def _compute_program_product_ids(self):
+ for record in self:
+ if record.program_line_id and record.program_line_id.product_ids:
+ product = record.program_line_id.product_ids[0]
+ record.program_product_id = product.product_id
+ record.product_id = product.product_id
+ else:
+ # Handle case where there are no product_ids
+ record.program_product_id = False
+
+ def _compute_price(self):
+ for record in self:
+ record.price = record.get_price_website(record.product_id.id)['price']
+ if record.program_line_id:
+ record.price = record.get_price_coret(record.program_line_id.id)
def _compute_user_other_carts(self):
for record in self:
diff --git a/indoteknik_custom/views/account_move_views.xml b/indoteknik_custom/views/account_move_views.xml
index 1c70cc7b..4acafb14 100644
--- a/indoteknik_custom/views/account_move_views.xml
+++ b/indoteknik_custom/views/account_move_views.xml
@@ -1,117 +1,157 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
- <record id="due_extension_tree" model="ir.ui.view">
- <field name="name">due.extension.tree</field>
- <field name="model">due.extension</field>
- <field name="arch" type="xml">
- <tree default_order="create_date desc" create="0">
- <field name="number"/>
- <field name="partner_id"/>
- <field name="day_extension"/>
- <field name="description"/>
- <field name="approval_status"/>
- <field name="is_approve"/>
- </tree>
- </field>
- </record>
+ <data>
+ <record id="due_extension_tree" model="ir.ui.view">
+ <field name="name">due.extension.tree</field>
+ <field name="model">due.extension</field>
+ <field name="arch" type="xml">
+ <tree default_order="create_date desc" create="0">
+ <field name="number"/>
+ <field name="partner_id"/>
+ <field name="day_extension"/>
+ <field name="description"/>
+ <field name="approval_status"/>
+ <field name="is_approve"/>
+ </tree>
+ </field>
+ </record>
- <record id="due_extension_line_tree" model="ir.ui.view">
- <field name="name">due.extension.line.tree</field>
- <field name="model">due.extension.line</field>
- <field name="arch" type="xml">
- <tree>
- <field name="partner_id"/>
- <field name="invoice_id"/>
- <field name="date_invoice"/>
- <field name="due_date"/>
- <field name="day_to_due"/>
- <field name="efaktur_id"/>
- <field name="reference"/>
- <field name="total_amt"/>
- <field name="open_amt"/>
- </tree>
- </field>
- </record>
+ <record id="due_extension_line_tree" model="ir.ui.view">
+ <field name="name">due.extension.line.tree</field>
+ <field name="model">due.extension.line</field>
+ <field name="arch" type="xml">
+ <tree>
+ <field name="partner_id"/>
+ <field name="invoice_id"/>
+ <field name="date_invoice"/>
+ <field name="due_date"/>
+ <field name="day_to_due"/>
+ <field name="efaktur_id"/>
+ <field name="reference"/>
+ <field name="total_amt"/>
+ <field name="open_amt"/>
+ </tree>
+ </field>
+ </record>
- <record id="due_extension_form" model="ir.ui.view">
- <field name="name">due.extension.form</field>
- <field name="model">due.extension</field>
- <field name="arch" type="xml">
- <form create="false">
- <header>
- <button name="approve_new_due"
- string="Approve"
- type="object"
- />
- <button name="due_extension_approval"
- string="Ask Approval"
+ <record id="due_extension_form" model="ir.ui.view">
+ <field name="name">due.extension.form</field>
+ <field name="model">due.extension</field>
+ <field name="arch" type="xml">
+ <form create="false">
+ <header>
+ <button name="approve_new_due"
+ string="Approve"
type="object"
- />
- <button name="due_extension_cancel"
- string="Cancel"
- type="object"
- />
- </header>
- <sheet>
- <group>
+ />
+ <button name="due_extension_approval"
+ string="Ask Approval"
+ type="object"
+ />
+ <button name="due_extension_cancel"
+ string="Cancel"
+ type="object"
+ />
+ </header>
+ <sheet>
<group>
- <field name="partner_id" readonly="1"/>
- <field name="day_extension" attrs="{'readonly': [('is_approve', '=', True)]}"/>
+ <group>
+ <field name="partner_id" readonly="1"/>
+ <field name="day_extension" attrs="{'readonly': [('is_approve', '=', True)]}"/>
+ </group>
+ <group>
+ <field name="is_approve" readonly="1"/>
+ <field name="order_id" readonly="1"/>
+ <field name="counter" readonly="1"/>
+ <field name="approval_status" readonly="1"/>
+ </group>
</group>
<group>
- <field name="is_approve" readonly="1"/>
- <field name="order_id" readonly="1"/>
- <field name="counter" readonly="1"/>
- <field name="approval_status" readonly="1"/>
+ <field name="description" attrs="{'readonly': [('approval_status', '=', 'approved')]}"/>
</group>
- </group>
- <group>
- <field name="description" attrs="{'readonly': [('approval_status', '=', 'approved')]}"/>
- </group>
- <notebook>
- <page string="Invoices">
- <field name="due_line" attrs="{'readonly': [('is_approve', '=', True)]}"/>
- </page>
- </notebook>
- </sheet>
- <div class="oe_chatter">
- <field name="message_follower_ids" widget="mail_followers"/>
- <field name="message_ids" widget="mail_thread"/>
- </div>
- </form>
- </field>
- </record>
+ <notebook>
+ <page string="Invoices">
+ <field name="due_line" attrs="{'readonly': [('is_approve', '=', True)]}"/>
+ </page>
+ </notebook>
+ </sheet>
+ <div class="oe_chatter">
+ <field name="message_follower_ids" widget="mail_followers"/>
+ <field name="message_ids" widget="mail_thread"/>
+ </div>
+ </form>
+ </field>
+ </record>
- <record id="due_extension_view_search" model="ir.ui.view">
- <field name="name">due.extension.search.view</field> <!-- Made the name more descriptive -->
- <field name="model">due.extension</field>
- <field name="arch" type="xml">
- <search string="Search Due Extension">
- <field name="number"/>
- <field name="partner_id"/>
- <field name="invoice_id"/>
- <field name="order_id"/>
- </search>
- </field>
- </record>
+ <record id="due_extension_view_search" model="ir.ui.view">
+ <field name="name">due.extension.search.view</field> <!-- Made the name more descriptive -->
+ <field name="model">due.extension</field>
+ <field name="arch" type="xml">
+ <search string="Search Due Extension">
+ <field name="number"/>
+ <field name="partner_id"/>
+ <field name="invoice_id"/>
+ <field name="order_id"/>
+ </search>
+ </field>
+ </record>
- <record id="due_extension_action" model="ir.actions.act_window">
- <field name="name">Due Extension</field>
- <field name="type">ir.actions.act_window</field>
- <field name="res_model">due.extension</field>
- <field name="view_mode">tree,form</field>
- </record>
+ <record id="due_extension_action" model="ir.actions.act_window">
+ <field name="name">Due Extension</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">due.extension</field>
+ <field name="view_mode">tree,form</field>
+ </record>
- <menuitem
- id="menu_due_extension"
- name="Due Extension"
- parent="sale.product_menu_catalog"
- sequence="4"
- action="due_extension_action"
- />
- <menuitem id="menu_due_extension" name="Due Extension"
- parent="account.menu_finance_receivables"
- action="due_extension_action"
- sequence="100"
- />
+ <menuitem
+ id="menu_due_extension"
+ name="Due Extension"
+ parent="sale.product_menu_catalog"
+ sequence="4"
+ action="due_extension_action"
+ />
+ <menuitem id="menu_due_extension" name="Due Extension"
+ parent="account.menu_finance_receivables"
+ action="due_extension_action"
+ sequence="100"
+ />
+
+ <record id="mail_template_due_extension_approve" model="mail.template">
+ <field name="name">Due Extension: Approve</field>
+ <field name="model_id" ref="indoteknik_custom.model_due_extension"/>
+ <field name="subject">Approval for Due Extension: DE ${object.name}</field>
+ <field name="email_from">"PT. Indoteknik Dotcom Gemilang" &lt;noreply@indoteknik.com&gt;</field>
+ <field name="reply_to">anto@indoteknik.co.id</field>
+ <field name="email_to"> ${object.order_id.user_id.login | safe}</field>
+ <field name="body_html" type="html">
+ <p>Dear Anto,</p>
+
+ <p>We would like to inform you that the due extension for the following document has been approved:</p>
+
+ <table border="0" cellpadding="5" cellspacing="0" width="15%">
+ <tr>
+ <td><strong>DE Number:</strong></td>
+ <td>${object.number}</td>
+ </tr>
+ <tr>
+ <td><strong>SO Number:</strong></td>
+ <td>${object.order_id.name}</td>
+ </tr>
+ <tr>
+ <td><strong>New Due Date:</strong></td>
+ <td>${object.due_line[0].invoice_id.new_due_date}</td>
+ </tr>
+ <tr>
+ <td><strong>Extension (days):</strong></td>
+ <td>${object.day_extension}</td>
+ </tr>
+ </table>
+
+ <p>If you have any further questions or need additional information, please feel free to contact us.</p>
+
+ <p>Best regards,</p>
+ <p><strong>PT. Indoteknik Dotcom Gemilang</strong></p>
+ </field>
+ </record>
+ </data>
</odoo>
diff --git a/indoteknik_custom/views/website_user_cart.xml b/indoteknik_custom/views/website_user_cart.xml
index 11573121..b4fb02be 100755
--- a/indoteknik_custom/views/website_user_cart.xml
+++ b/indoteknik_custom/views/website_user_cart.xml
@@ -11,13 +11,17 @@
<field name="model">website.user.cart</field>
<field name="arch" type="xml">
<tree>
+ <field name="create_date"/>
<field name="user_id"/>
<field name="product_id"/>
+ <field name="phone_user"/>
+ <field name="price"/>
<field name="program_line_id"/>
<field name="qty"/>
<field name="is_selected"/>
<field name="is_reminder"/>
<field name="source"/>
+ <field name="program_product_id" optional="hide"/>
</tree>
</field>
</record>
@@ -37,6 +41,9 @@
<field name="is_selected" />
<field name="is_reminder" />
<field name="source" />
+ <field name="phone_user"/>
+ <field name="program_product_id"/>
+ <field name="price"/>
</group>
<group></group>
</group>