summaryrefslogtreecommitdiff
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
parent968d9987eb53670f0d96209e77debb1196f9b939 (diff)
parentf4486625017ee5edae369a6be283863a30066b3b (diff)
Merge branch 'odoo-backup' of https://bitbucket.org/altafixco/indoteknik-addons into tukar_guling
-rw-r--r--ab_openstreetmap/static/src/js/googlemap_widget.js31
-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
-rw-r--r--indoteknik_custom/views/customer_commision.xml2
-rw-r--r--indoteknik_custom/views/res_partner.xml4
-rwxr-xr-xindoteknik_custom/views/sale_order.xml6
7 files changed, 88 insertions, 80 deletions
diff --git a/ab_openstreetmap/static/src/js/googlemap_widget.js b/ab_openstreetmap/static/src/js/googlemap_widget.js
index 1728fa54..6471be0b 100644
--- a/ab_openstreetmap/static/src/js/googlemap_widget.js
+++ b/ab_openstreetmap/static/src/js/googlemap_widget.js
@@ -13,30 +13,23 @@ odoo.define("ab_openstreetmap.googlemap_widget", function (require) {
this._waitForMapReady();
},
+ on_attach_callback: function () {
+ this._waitForMapReady(); // Trigger ulang saat widget dimunculkan
+ },
+
_waitForMapReady: function () {
const mapEl = document.getElementById("mapid");
if (mapEl && mapEl.offsetWidth > 0 && mapEl.offsetHeight > 0) {
this._loadGoogle();
} else {
- setTimeout(() => this._waitForMapReady(), 100);
+ setTimeout(() => this._waitForMapReady(), 300); // Tambah jeda untuk mode edit/tab
}
},
async _loadGoogle() {
- // const apiKey = await rpc.query({
- // model: "ir.config_parameter",
- // method: "get_param",
- // args: ["google.maps.api_key"],
- // });
- // const mapId = await rpc.query({
- // model: "ir.config_parameter",
- // method: "get_param",
- // args: ["google.maps.map_id"],
- // });
-
- const apiKey = "AIzaSyB7bG9aSNAJnSrj0Z7f1abFsqKVoiJfsPE"; // Ganti dengan API Key Anda
- const mapId = "1af072c8d80a2adec8057f34";
- // Ganti dengan Map ID Anda
+ const apiKey = "AIzaSyB7bG9aSNAJnSrj0Z7f1abFsqKVoiJfsPE"; // Ganti sesuai kebutuhan
+ const mapId = "1af072c8d80a2adec8057f34"; // Ganti sesuai kebutuhan
+
if (!window.google || !window.google.maps) {
const script = document.createElement("script");
script.src = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&v=weekly&libraries=places,marker`;
@@ -57,6 +50,7 @@ odoo.define("ab_openstreetmap.googlemap_widget", function (require) {
if (!mapEl) return;
mapEl.style.position = "relative";
+ mapEl.style.minHeight = "400px"; // Pastikan map tidak collapse
const { Map } = await google.maps.importLibrary("maps");
const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
@@ -67,6 +61,12 @@ odoo.define("ab_openstreetmap.googlemap_widget", function (require) {
mapId: mapId || undefined,
});
+ // Trigger resize untuk menangani kasus map awalnya hidden
+ setTimeout(() => {
+ google.maps.event.trigger(map, "resize");
+ map.setCenter({ lat, lng }); // Reset ulang posisi setelah resize
+ }, 300);
+
const marker = new AdvancedMarkerElement({
map,
position: { lat, lng },
@@ -100,7 +100,6 @@ odoo.define("ab_openstreetmap.googlemap_widget", function (require) {
`;
mapEl.appendChild(input);
- // Gunakan Autocomplete klasik (deprecated tapi stabil)
const autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.addListener("place_changed", () => {
const place = autocomplete.getPlace();
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):
diff --git a/indoteknik_custom/views/customer_commision.xml b/indoteknik_custom/views/customer_commision.xml
index 37df16ff..4be0840f 100644
--- a/indoteknik_custom/views/customer_commision.xml
+++ b/indoteknik_custom/views/customer_commision.xml
@@ -81,6 +81,8 @@
<field name="commision_percent"/>
<field name="commision_amt"/>
<field name="commision_amt_text"/>
+ <field name="cashback" attrs="{'invisible': [('commision_type', 'not in', ['cashback'])]}"/>
+ <field name="total_commision" attrs="{'invisible': [('commision_type', 'not in', ['cashback'])]}"/>
<field name="grouped_so_number" readonly="1"/>
<field name="grouped_invoice_number" readonly="1"/>
<field name="approved_by" readonly="1"/>
diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml
index 2a4b03a7..30b5ca36 100644
--- a/indoteknik_custom/views/res_partner.xml
+++ b/indoteknik_custom/views/res_partner.xml
@@ -67,9 +67,9 @@
</group>
<xpath expr="//notebook/page[@name='contact_addresses']" position="before">
<page string="Pin Point Location" name="map_location">
- <!-- <group>
+ <group>
<button name="geocode_address" type="object" string="Get Pin Point Location" class="btn btn-primary"/>
- </group> -->
+ </group>
<div style="margin: 16px 0;">
<field name="map_view" widget="googlemap" nolabel="1"/>
</div>
diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml
index fbca3705..d0442677 100755
--- a/indoteknik_custom/views/sale_order.xml
+++ b/indoteknik_custom/views/sale_order.xml
@@ -305,14 +305,12 @@
</field>
<field name="select_shipping_option" position="attributes">
<attribute name="attrs">
- {'readonly': [('approval_status', '=', 'approved'), ('state', 'not in',
- ['cancel','draft'])]}
+ {'readonly': [('state', 'in', ['cancel', 'done'])]}
</attribute>
</field>
<field name="carrier_id" position="attributes">
<attribute name="attrs">
- {'readonly': [('approval_status', '=', 'approved'), ('state', 'not in',
- ['cancel', 'draft'])]}
+ {'readonly': [('state', 'in', ['cancel', 'done'])]}
</attribute>
</field>
<field name="payment_term_id" position="attributes">