summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-06-18 10:36:17 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-06-18 10:36:17 +0700
commitfe8c7bf1903242610d99381b5109506294648d10 (patch)
tree2b77e018dee5eaa5b93b66c691a84055ef7806e3 /indoteknik_custom/models
parent968d9987eb53670f0d96209e77debb1196f9b939 (diff)
parentf4486625017ee5edae369a6be283863a30066b3b (diff)
Merge branch 'odoo-backup' of https://bitbucket.org/altafixco/indoteknik-addons into tukar_guling
Diffstat (limited to 'indoteknik_custom/models')
-rw-r--r--indoteknik_custom/models/commision.py11
-rw-r--r--indoteknik_custom/models/res_partner.py14
-rwxr-xr-xindoteknik_custom/models/sale_order.py100
3 files changed, 67 insertions, 58 deletions
diff --git a/indoteknik_custom/models/commision.py b/indoteknik_custom/models/commision.py
index 842e64bf..d3392a0c 100644
--- a/indoteknik_custom/models/commision.py
+++ b/indoteknik_custom/models/commision.py
@@ -177,6 +177,8 @@ class CustomerCommision(models.Model):
], string='Status')
commision_percent = fields.Float(string='Commision %', tracking=3)
commision_amt = fields.Float(string='Commision Amount', tracking=3)
+ cashback = fields.Float(string='Cashback', tracking=3)
+ total_commision = fields.Float(string='Total Commision', tracking=3)
commision_amt_text = fields.Char(string='Commision Amount Text', compute='compute_delivery_amt_text')
total_dpp = fields.Float(string='Total DPP', compute='_compute_total_dpp')
commision_type = fields.Selection([
@@ -316,6 +318,9 @@ class CustomerCommision(models.Model):
if self.commision_amt == 0:
self.commision_amt = self.commision_percent * self.total_dpp // 100
+ if self.commision_type == 'cashback':
+ self.cashback = self.commision_amt * 0.15
+ self.total_commision = self.commision_amt * 0.85
@api.constrains('commision_amt')
def _onchange_commision_amt(self):
@@ -328,6 +333,12 @@ class CustomerCommision(models.Model):
if self.total_dpp > 0 and self.commision_percent == 0:
self.commision_percent = (self.commision_amt / self.total_dpp) * 100
+ @api.constrains('commision_type')
+ def _onchange_commision_amt(self):
+ if self.commision_type == 'cashback' and self.commision_amt > 0:
+ self.cashback = self.commision_amt * 0.15
+ self.total_commision = self.commision_amt * 0.85
+
def _compute_total_dpp(self):
for data in self:
total_dpp = 0
diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py
index a8ce95d1..9986b9c0 100644
--- a/indoteknik_custom/models/res_partner.py
+++ b/indoteknik_custom/models/res_partner.py
@@ -579,9 +579,10 @@ class ResPartner(models.Model):
])
# Ambil API Key
- api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key')
- if not api_key:
- raise UserError("API Key Google Maps belum dikonfigurasi. Silakan isi melalui Settings.")
+ api_key = "AIzaSyB7bG9aSNAJnSrj0Z7f1abFsqKVoiJfsPE"
+ # api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key')
+ # if not api_key:
+ # raise UserError("API Key Google Maps belum dikonfigurasi. Silakan isi melalui Settings.")
# Request ke Google Maps
url = f'https://maps.googleapis.com/maps/api/geocode/json?address={address}&key={api_key}'
@@ -638,9 +639,10 @@ class ResPartner(models.Model):
def _reverse_geocode(self, lat, lng):
- api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key')
- if not api_key:
- raise UserError("API Key Google Maps belum dikonfigurasi.")
+ api_key = "AIzaSyB7bG9aSNAJnSrj0Z7f1abFsqKVoiJfsPE"
+ # api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key')
+ # if not api_key:
+ # raise UserError("API Key Google Maps belum dikonfigurasi.")
url = f'https://maps.googleapis.com/maps/api/geocode/json?latlng={lat},{lng}&key={api_key}'
response = requests.get(url)
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 1771f210..68beffbc 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -377,37 +377,37 @@ class SaleOrder(models.Model):
carrier_ids = [row[0] for row in result if row[0]]
return carrier_ids
- @api.model
- def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
- res = super(SaleOrder, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
-
- if view_type == 'form':
- doc = etree.XML(res['arch'])
-
- # Ambil semua delivery_carrier_id dari mapping rajaongkir_kurir
- biteship_ids = self.env['rajaongkir.kurir'].search([]).mapped('delivery_carrier_id.id')
- biteship_ids = list(set(filter(None, biteship_ids))) # pastikan unik dan bukan None
-
- all_ids = self.env['delivery.carrier'].search([]).ids
- custom_ids = list(set(all_ids) - set(biteship_ids))
-
- # Format sebagai string Python list
- biteship_ids_str = ','.join(str(i) for i in biteship_ids) or '-1'
- custom_ids_str = ','.join(str(i) for i in custom_ids) or '-1'
-
- # Terapkan domain ke field carrier_id
- for node in doc.xpath("//field[@name='carrier_id']"):
- # Domain tergantung select_shipping_option
- node.set(
- 'domain',
- "[('id', 'in', [%s]) if select_shipping_option == 'biteship' else ('id', 'in', [%s])]" %
- (biteship_ids_str, custom_ids_str)
- )
+ # @api.model
+ # def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
+ # res = super(SaleOrder, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
+
+ # if view_type == 'form':
+ # doc = etree.XML(res['arch'])
+
+ # # Ambil semua delivery_carrier_id dari mapping rajaongkir_kurir
+ # biteship_ids = self.env['rajaongkir.kurir'].search([]).mapped('delivery_carrier_id.id')
+ # biteship_ids = list(set(filter(None, biteship_ids))) # pastikan unik dan bukan None
+
+ # all_ids = self.env['delivery.carrier'].search([]).ids
+ # custom_ids = list(set(all_ids) - set(biteship_ids))
+
+ # # Format sebagai string Python list
+ # biteship_ids_str = ','.join(str(i) for i in biteship_ids) or '-1'
+ # custom_ids_str = ','.join(str(i) for i in custom_ids) or '-1'
+
+ # # Terapkan domain ke field carrier_id
+ # for node in doc.xpath("//field[@name='carrier_id']"):
+ # # Domain tergantung select_shipping_option
+ # node.set(
+ # 'domain',
+ # "[('id', 'in', [%s]) if select_shipping_option == 'biteship' else ('id', 'in', [%s])]" %
+ # (biteship_ids_str, custom_ids_str)
+ # )
- # Simpan kembali hasil XML ke arsitektur form
- res['arch'] = etree.tostring(doc, encoding='unicode')
+ # # Simpan kembali hasil XML ke arsitektur form
+ # res['arch'] = etree.tostring(doc, encoding='unicode')
- return res
+ # return res
# @api.onchange('shipping_option_id')
# def _onchange_shipping_option_id(self):
@@ -599,40 +599,36 @@ class SaleOrder(models.Model):
@api.onchange('select_shipping_option')
def _onchange_select_shipping_option(self):
- if self.select_shipping_option == 'biteship' and self.shipping_cost_covered == 'indoteknik':
- self.select_shipping_option = self._origin.select_shipping_option if self._origin else 'custom'
- return {
- 'warning': {
- 'title': "Biteship Tidak Diizinkan",
- 'message': (
- "Biaya pengiriman ditanggung Indoteknik. Tidak diizinkan memilih metode Biteship. "
- "Opsi pengiriman dikembalikan ke sebelumnya."
- )
- }
- }
-
self.shipping_option_id = False
+ self.delivery_service_type = False
self.carrier_id = False
self.delivery_amt = 0
-
- # Dapatkan semua ID carrier untuk Biteship
+
biteship_carrier_ids = []
-
- # Gunakan SQL langsung untuk menghindari masalah ORM
self.env.cr.execute("""
SELECT delivery_carrier_id
FROM rajaongkir_kurir
WHERE name IN %s
""", (tuple(self._get_biteship_courier_codes()),))
-
- # Ambil ID numerik hasil query
biteship_carrier_ids = [row[0] for row in self.env.cr.fetchall() if row[0]]
-
+
if self.select_shipping_option == 'biteship':
- domain = [('id', 'in', biteship_carrier_ids)] if biteship_carrier_ids else []
- else: # 'custom'
- domain = [('id', 'not in', biteship_carrier_ids)] if biteship_carrier_ids else []
-
+ if self.shipping_cost_covered == 'indoteknik':
+ self.select_shipping_option = self._origin.select_shipping_option if self._origin else 'custom'
+ return {
+ 'warning': {
+ 'title': "Biteship Tidak Diizinkan",
+ 'message': (
+ "Biaya pengiriman ditanggung Indoteknik. Tidak diizinkan memilih metode Biteship. "
+ "Opsi pengiriman dikembalikan ke sebelumnya."
+ )
+ }
+ }
+
+ domain = [('id', 'in', biteship_carrier_ids)] if biteship_carrier_ids else [('id', '=', -1)]
+ else:
+ domain = [] # tampilkan semua
+
return {'domain': {'carrier_id': domain}}
# def _compute_total_margin_excl_third_party(self):