summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-01-04 14:52:28 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-01-04 14:52:28 +0700
commit7cc4bec031757d23c7f7f9e754fc2997d2dfd921 (patch)
tree2ace5dc432e04a4d8f91be276b3c8b83adda3935
parent3a5407d507ff985e10b4675727643bf5af107d11 (diff)
parentb0f4f1875216bbb0347c082f38b91b59e5bbf50c (diff)
Merge branch 'release' into staging
-rw-r--r--indoteknik_api/controllers/api_v1/__init__.py1
-rw-r--r--indoteknik_api/controllers/api_v1/customer.py28
-rwxr-xr-xindoteknik_custom/__manifest__.py6
-rwxr-xr-xindoteknik_custom/models/__init__.py6
-rw-r--r--indoteknik_custom/models/customer_review.py16
-rw-r--r--indoteknik_custom/models/product_spec.py19
-rwxr-xr-xindoteknik_custom/models/product_template.py16
-rwxr-xr-xindoteknik_custom/models/purchase_order.py20
-rw-r--r--indoteknik_custom/models/purchase_outstanding.py33
-rwxr-xr-xindoteknik_custom/models/sale_order.py66
-rw-r--r--indoteknik_custom/models/sales_outstanding.py33
-rw-r--r--indoteknik_custom/models/sales_target.py55
-rw-r--r--indoteknik_custom/models/website_content.py34
-rwxr-xr-xindoteknik_custom/models/x_manufactures.py20
-rwxr-xr-xindoteknik_custom/security/ir.model.access.csv8
-rw-r--r--indoteknik_custom/views/customer_review.xml55
-rwxr-xr-xindoteknik_custom/views/product_template.xml23
-rwxr-xr-xindoteknik_custom/views/purchase_order.xml1
-rw-r--r--indoteknik_custom/views/purchase_outstanding.xml74
-rwxr-xr-xindoteknik_custom/views/sale_order.xml25
-rw-r--r--indoteknik_custom/views/sales_outstanding.xml74
-rw-r--r--indoteknik_custom/views/sales_target.xml53
-rw-r--r--indoteknik_custom/views/stock_picking.xml13
-rw-r--r--indoteknik_custom/views/website_content.xml65
-rw-r--r--indoteknik_custom/views/website_content_channel.xml58
-rwxr-xr-xindoteknik_custom/views/x_manufactures.xml2
26 files changed, 793 insertions, 11 deletions
diff --git a/indoteknik_api/controllers/api_v1/__init__.py b/indoteknik_api/controllers/api_v1/__init__.py
index 5b4f38a0..2a93bcae 100644
--- a/indoteknik_api/controllers/api_v1/__init__.py
+++ b/indoteknik_api/controllers/api_v1/__init__.py
@@ -11,3 +11,4 @@ from . import sale_order
from . import user
from . import wishlist
from . import brand_homepage
+from . import customer
diff --git a/indoteknik_api/controllers/api_v1/customer.py b/indoteknik_api/controllers/api_v1/customer.py
new file mode 100644
index 00000000..58c93376
--- /dev/null
+++ b/indoteknik_api/controllers/api_v1/customer.py
@@ -0,0 +1,28 @@
+from .. import controller
+from odoo import http
+from odoo.http import request
+import ast
+
+
+class CustomerReview(controller.Controller):
+ prefix = '/api/v1/'
+
+ @http.route(prefix + 'customer_review', auth='public', methods=['GET', 'OPTIONS'])
+ def get_customer_review(self, **kw):
+ if not self.authenticate():
+ return self.response(code=401, description='Unauthorized')
+ base_url = request.env['ir.config_parameter'].get_param('web.base.url')
+ query = [('status', '=', 'tayang')]
+ reviews = request.env['customer.review'].search(query, order='sequence')
+ data = []
+ for review in reviews:
+ data.append({
+ 'id': review.id,
+ 'sequence': review.sequence,
+ 'image': base_url + 'api/image/customer.review/image/' + str(review.id) if review.image else '',
+ 'customer_name': review.customer_name,
+ 'ulasan': review.ulasan,
+ 'name': review.name,
+ 'jabatan': review.jabatan
+ })
+ return self.response(data)
diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py
index 633d407b..137cfb1f 100755
--- a/indoteknik_custom/__manifest__.py
+++ b/indoteknik_custom/__manifest__.py
@@ -48,6 +48,12 @@
'views/dunning_run.xml',
'views/website_brand_homepage.xml',
'views/website_categories_homepage.xml',
+ 'views/sales_target.xml',
+ 'views/purchase_outstanding.xml',
+ 'views/sales_outstanding.xml',
+ 'views/customer_review.xml',
+ 'views/website_content_channel.xml',
+ 'views/website_content.xml',
'report/report.xml',
'report/report_banner_banner.xml',
'report/report_banner_banner2.xml',
diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py
index dc85ce96..d7d3e03c 100755
--- a/indoteknik_custom/models/__init__.py
+++ b/indoteknik_custom/models/__init__.py
@@ -35,3 +35,9 @@ from . import website_user_wishlist
from . import website_brand_homepage
from . import mail_mail
from . import website_categories_homepage
+from . import sales_target
+from . import product_spec
+from . import purchase_outstanding
+from . import sales_outstanding
+from . import customer_review
+from . import website_content
diff --git a/indoteknik_custom/models/customer_review.py b/indoteknik_custom/models/customer_review.py
new file mode 100644
index 00000000..5fb93b2e
--- /dev/null
+++ b/indoteknik_custom/models/customer_review.py
@@ -0,0 +1,16 @@
+from odoo import fields, models, api
+
+
+class CustomerReview(models.Model):
+ _name = 'customer.review'
+
+ sequence = fields.Integer(string='Sequence')
+ customer_name = fields.Char(string='Customer')
+ image = fields.Binary(string='Image')
+ ulasan = fields.Char(string='Ulasan')
+ name = fields.Char(string='Name')
+ jabatan = fields.Char(string='Jabatan')
+ status = fields.Selection([
+ ('tayang', 'Tayang'),
+ ('tidak_tayang', 'Tidak Tayang')
+ ], string='Status')
diff --git a/indoteknik_custom/models/product_spec.py b/indoteknik_custom/models/product_spec.py
new file mode 100644
index 00000000..161438b6
--- /dev/null
+++ b/indoteknik_custom/models/product_spec.py
@@ -0,0 +1,19 @@
+from odoo import fields, models, api
+from datetime import datetime, timedelta
+import logging
+
+_logger = logging.getLogger(__name__)
+
+
+class ProductTemplateSpec(models.Model):
+ _name = 'product.template.spec'
+ product_tmpl_id = fields.Many2one('product.template', string='Product Template')
+ attribute = fields.Char(string='Attribute', help='Attribute of Product')
+ value = fields.Char(string='Values', help='Value of Attribute')
+
+
+class ProductVariantSpec(models.Model):
+ _name = 'product.variant.spec'
+ product_variant_id = fields.Many2one('product.product', string='Product Variant')
+ attribute = fields.Char(string='Attribute', help='Attribute of Product')
+ value = fields.Char(string='Values', help='Value of Attribute')
diff --git a/indoteknik_custom/models/product_template.py b/indoteknik_custom/models/product_template.py
index 9ddaf91c..dbbd4ad4 100755
--- a/indoteknik_custom/models/product_template.py
+++ b/indoteknik_custom/models/product_template.py
@@ -36,6 +36,14 @@ class ProductTemplate(models.Model):
search_rank = fields.Integer(string='Search Rank', default=0)
search_rank_weekly = fields.Integer(string='Search Rank Weekly', default=0)
supplier_url = fields.Char(string='Vendor URL')
+ # custom field for support Trusco products
+ maker_code = fields.Char(string='Maker Code')
+ maker_name = fields.Char(string='Maker Name')
+ origin = fields.Char(string='Origin')
+ features = fields.Char(string='Features')
+ usage = fields.Char(string='Usage')
+ specification = fields.Char(string='Specification')
+ material = fields.Char(string='Material')
# def write(self, vals):
# if 'solr_flag' not in vals and self.solr_flag == 1:
@@ -182,6 +190,14 @@ class ProductProduct(models.Model):
'Qty Stock Vendor', compute='_compute_stock_vendor',
help="Stock Vendor")
solr_flag = fields.Integer(string='Solr Flag', default=0)
+ # custom field for support Trusco products
+ maker_code = fields.Char(string='Maker Code')
+ maker_name = fields.Char(string='Maker Name')
+ origin = fields.Char(string='Origin')
+ features = fields.Char(string='Features')
+ usage = fields.Char(string='Usage')
+ specification = fields.Char(string='Specification')
+ material = fields.Char(string='Material')
# def write(self, vals):
# if 'solr_flag' not in vals:
diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py
index a816038e..b4d671b6 100755
--- a/indoteknik_custom/models/purchase_order.py
+++ b/indoteknik_custom/models/purchase_order.py
@@ -70,19 +70,29 @@ class PurchaseOrder(models.Model):
def calculate_po_status(self):
purchases = self.env['purchase.order'].search([
('po_status', '!=', 'terproses'),
+ # ('id', '=', 213),
])
for order in purchases:
sum_qty_received = sum_qty_po = 0
+
+ have_outstanding_pick = False
+ for pick in order.picking_ids:
+ if pick.state == 'draft' or pick.state == 'assigned' or pick.state == 'confirmed' or pick.state == 'waiting':
+ have_outstanding_pick = True
+
for po_line in order.order_line:
sum_qty_po += po_line.product_uom_qty
sum_qty_received += po_line.qty_received
- if order.summary_qty_po == order.summary_qty_receipt:
- order.po_status = 'terproses'
- elif order.summary_qty_po > order.summary_qty_receipt > 0:
- order.po_status = 'sebagian'
+ if have_outstanding_pick:
+ # if order.summary_qty_po == order.summary_qty_receipt:
+ # order.po_status = 'terproses'
+ if order.summary_qty_po > order.summary_qty_receipt > 0:
+ order.po_status = 'sebagian'
+ else:
+ order.po_status = 'menunggu'
else:
- order.po_status = 'menunggu'
+ order.po_status = 'terproses'
_logger.info("Calculate PO Status %s" % order.id)
def _compute_summary_qty(self):
diff --git a/indoteknik_custom/models/purchase_outstanding.py b/indoteknik_custom/models/purchase_outstanding.py
new file mode 100644
index 00000000..018ab0ec
--- /dev/null
+++ b/indoteknik_custom/models/purchase_outstanding.py
@@ -0,0 +1,33 @@
+from odoo import fields, models, api, tools
+
+
+class PurchaseOutstanding(models.Model):
+ _name = 'purchase.outstanding'
+ _auto = False
+ _rec_name = 'product_id'
+
+ id = fields.Integer()
+ order_id = fields.Many2one('purchase.order', string='Nomor PO')
+ partner_id = fields.Many2one('res.partner', String='Vendor')
+ user_id = fields.Many2one('res.users', string='Purchaser')
+ date_order = fields.Datetime(string="Date Order")
+ po_state = fields.Char(string='State')
+ po_status = fields.Char(string='PO Status')
+ product_id = fields.Many2one('product.product', string='Product')
+ product_uom_qty = fields.Integer(string='Qty PO')
+ qty_received = fields.Integer(string='Qty Received')
+
+ def init(self):
+ tools.drop_view_if_exists(self.env.cr, self._table)
+ self.env.cr.execute("""
+ CREATE OR REPLACE VIEW %s AS(
+ select pol.id as id, po.id as order_id, po.partner_id, po.user_id,
+ po.date_order, po.state as po_state, po.po_status,
+ pol.product_id, pol.product_uom_qty, pol.qty_received
+ from purchase_order_line pol
+ join purchase_order po on po.id = pol.order_id
+ where 1=1
+ and pol.product_uom_qty <> pol.qty_received
+ and po_status in ('sebagian','menunggu')
+ )
+ """ % self._table)
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index f21a80fe..3f6f5032 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -1,9 +1,11 @@
from odoo import fields, models, api, _
from odoo.exceptions import AccessError, UserError, ValidationError
from odoo.tools.misc import formatLang, get_lang
-
+import logging
import warnings
+_logger = logging.getLogger(__name__)
+
class SaleOrder(models.Model):
_inherit = "sale.order"
@@ -42,6 +44,68 @@ class SaleOrder(models.Model):
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",
help="Dipakai untuk alamat tempel")
fee_third_party = fields.Float('Fee Pihak Ketiga')
+ so_status = fields.Selection([
+ ('terproses', 'Terproses'),
+ ('sebagian', 'Sebagian Diproses'),
+ ('menunggu', 'Menunggu Diproses'),
+ ])
+ partner_purchase_order_name = fields.Char(string='Nama PO Customer', copy=False, help="Nama purchase order customer, diisi oleh customer melalui website.", tracking=3)
+ partner_purchase_order_description = fields.Text(string='Keterangan PO Customer', copy=False, help="Keterangan purchase order customer, diisi oleh customer melalui website.", tracking=3)
+ partner_purchase_order_file = fields.Binary(string='File PO Customer', copy=False, help="File purchase order customer, diisi oleh customer melalui website.")
+
+ def calculate_so_status_beginning(self):
+ so_state = ['sale']
+ sales = self.env['sale.order'].search([
+ ('state', 'in', so_state),# must add validation so_status
+ ])
+ for sale in sales:
+ sum_qty_ship = sum_qty_so = 0
+ have_outstanding_pick = False
+
+ for pick in sale.picking_ids:
+ if pick.state == 'draft' or pick.state == 'assigned' or pick.state == 'confirmed' or pick.state == 'waiting':
+ have_outstanding_pick = True
+
+ for so_line in sale.order_line:
+ sum_qty_so += so_line.product_uom_qty
+ sum_qty_ship += so_line.qty_delivered
+
+ if have_outstanding_pick:
+ if sum_qty_so > sum_qty_ship > 0:
+ sale.so_status = 'sebagian'
+ else:
+ sale.so_status = 'menunggu'
+ else:
+ sale.so_status = 'terproses'
+ _logger.info('Calculate SO Status %s' % sale.id)
+
+ def calculate_so_status(self):
+ so_state = ['sale']
+ so_status = ['sebagian', 'menunggu']
+ sales = self.env['sale.order'].search([
+ ('state', 'in', so_state),
+ ('so_status', 'in', so_status),
+ ])
+ for sale in sales:
+ sum_qty_ship = sum_qty_so = 0
+ have_outstanding_pick = False
+
+ for pick in sale.picking_ids:
+ if pick.state == 'draft' or pick.state == 'assigned' or pick.state == 'confirmed' or pick.state == 'waiting':
+ have_outstanding_pick = True
+
+ for so_line in sale.order_line:
+ sum_qty_so += so_line.product_uom_qty
+ sum_qty_ship += so_line.qty_delivered
+
+ if have_outstanding_pick:
+ if sum_qty_so > sum_qty_ship > 0:
+ sale.so_status = 'sebagian'
+ else:
+ sale.so_status = 'menunggu'
+ else:
+ sale.so_status = 'terproses'
+ _logger.info('Calculate SO Status %s' % sale.id)
@api.onchange('partner_shipping_id')
def onchange_partner_shipping(self):
diff --git a/indoteknik_custom/models/sales_outstanding.py b/indoteknik_custom/models/sales_outstanding.py
new file mode 100644
index 00000000..645482ff
--- /dev/null
+++ b/indoteknik_custom/models/sales_outstanding.py
@@ -0,0 +1,33 @@
+from odoo import fields, models, api, tools
+
+
+class SalesOutstanding(models.Model):
+ _name = 'sales.outstanding'
+ _auto = False
+ _rec_name = 'product_id'
+
+ id = fields.Integer()
+ order_id = fields.Many2one('sale.order', string='Nomor SO')
+ partner_id = fields.Many2one('res.partner', String='Customer')
+ user_id = fields.Many2one('res.users', string='Salesperson')
+ date_order = fields.Datetime(string="Date Order")
+ so_state = fields.Char(string='State')
+ so_status = fields.Char(string='SO Status')
+ product_id = fields.Many2one('product.product', string='Product')
+ product_uom_qty = fields.Integer(string='Qty SO')
+ qty_delivered = fields.Integer(string='Qty Delivered')
+
+ def init(self):
+ tools.drop_view_if_exists(self.env.cr, self._table)
+ self.env.cr.execute("""
+ CREATE OR REPLACE VIEW %s AS(
+ select sol.id as id, so.id as order_id, so.partner_id, so.user_id,
+ so.date_order, so.state as so_state, so.so_status,
+ sol.product_id, sol.product_uom_qty, sol.qty_delivered
+ from sale_order so
+ join sale_order_line sol on sol.order_id = so.id
+ where 1=1
+ and sol.product_uom_qty <> sol.qty_delivered
+ and so_status in ('sebagian','menunggu')
+ )
+ """ % self._table)
diff --git a/indoteknik_custom/models/sales_target.py b/indoteknik_custom/models/sales_target.py
new file mode 100644
index 00000000..ac6405e5
--- /dev/null
+++ b/indoteknik_custom/models/sales_target.py
@@ -0,0 +1,55 @@
+from odoo import fields, models, api
+from datetime import datetime, timedelta
+import logging
+
+_logger = logging.getLogger(__name__)
+
+
+class SalesTarget(models.Model):
+ _name = 'sales.target'
+
+ partner_id = fields.Many2one('res.partner', string='Customer')
+ period = fields.Integer(string='Periode')
+ omset_last_year = fields.Float(string='Omset Tahun Lalu')
+ ongoing_omset_odoo = fields.Float(string='Omset Berjalan Odoo', compute='_compute_ongoing_omset')
+ ongoing_omset_accurate = fields.Float(string='Omset Berjalan Accurate')
+ ongoing_omset_adempiere = fields.Float(string='Omset Berjalan ADempiere')
+ ongoing_omset_total = fields.Float(string='Total Omset', compute='_compute_total_omset')
+ target = fields.Float(string='Target')
+
+ def _compute_total_omset(self):
+ for target in self:
+ target.ongoing_omset_total = target.ongoing_omset_odoo + target.ongoing_omset_accurate + target.ongoing_omset_adempiere
+
+ def _compute_ongoing_omset(self):
+ for target in self:
+ target.ongoing_omset_odoo = 0
+ if not target.ids:
+ return True
+
+ partners = []
+ if target.partner_id.parent_id:
+ parent_id = target.partner_id.parent_id
+ else:
+ parent_id = target.partner_id
+ partners += parent_id.child_ids
+ partners.append(parent_id)
+
+ datefrom = datetime(target.period, 1, 1, 00, 00)
+ # datefrom = datefrom.strftime('%Y-%m-%d %H:%M:%S')
+ dateto = datetime(target.period, 12, 31, 23, 59)
+ # dateto = dateto.strftime('%Y-%m-%d %H:%M:%S')
+
+ total_omset = 0
+ for partner in partners:
+ domain = [
+ ('partner_id', '=', partner.id),
+ ('state', 'not in', ['draft', 'cancel']),
+ ('move_type', 'in', ('out_invoice', 'out_refund')),
+ ('invoice_date', '>=', datefrom),
+ ('invoice_date', '<=', dateto)
+ ]
+ invoices = target.env['account.move'].search(domain)
+ for invoice in invoices:
+ total_omset += invoice.amount_untaxed
+ target.ongoing_omset_odoo = total_omset
diff --git a/indoteknik_custom/models/website_content.py b/indoteknik_custom/models/website_content.py
new file mode 100644
index 00000000..e94076f8
--- /dev/null
+++ b/indoteknik_custom/models/website_content.py
@@ -0,0 +1,34 @@
+from odoo import fields, models, api
+import logging
+
+_logger = logging.getLogger(__name__)
+
+
+class WebsiteContent(models.Model):
+ _name = 'website.content'
+
+ sequence = fields.Integer(string='Sequence')
+ slide_type = fields.Selection([
+ ('document', 'Document'),
+ ('infographic', 'Infographic'),
+ ('presentation', 'Presentation'),
+ ('video', 'Video')
+ ])
+ name = fields.Char(string='Name')
+ url = fields.Char(string='URL')
+ channel_id = fields.Many2one('website.content.channel', string='Channel')
+ status = fields.Selection([
+ ('tayang', 'Tayang'),
+ ('tidak_tayang', 'Tidak Tayang')
+ ], string='Status')
+
+
+class WebsiteContentChannel(models.Model):
+ _name = 'website.content.channel'
+
+ name = fields.Char(string='Name')
+ description_html = fields.Html('Description', sanitize_attributes=False, sanitize_form=False)
+ visibility = fields.Selection([
+ ('public', 'Public'),
+ ('internal', 'Internal')
+ ])
diff --git a/indoteknik_custom/models/x_manufactures.py b/indoteknik_custom/models/x_manufactures.py
index 24b64c14..1d215cf8 100755
--- a/indoteknik_custom/models/x_manufactures.py
+++ b/indoteknik_custom/models/x_manufactures.py
@@ -1,5 +1,7 @@
from odoo import models, fields, api
+import logging
+_logger = logging.getLogger(__name__)
class XManufactures(models.Model):
_name = 'x_manufactures'
@@ -36,6 +38,24 @@ class XManufactures(models.Model):
], string="Jenis Produk")
x_short_desc = fields.Text(string="Short Description")
product_tmpl_ids = fields.One2many('product.template', 'x_manufacture', string='Product Templates')
+ cache_reset_status = fields.Selection([
+ ('reset', 'Reset'),
+ ('done', 'Done')
+ ], string="Cache Reset")
+
+ def cache_reset(self):
+ manufactures = self.env['x_manufactures'].search([
+ ('cache_reset_status', '=', 'reset'),
+ ])
+ for manufacture in manufactures:
+ products = self.env['product.template'].search([
+ ('x_manufacture', '=', manufacture.id),
+ ('solr_flag', '=', 1),
+ ])
+ for product in products:
+ product.solr_flag = 2
+ _logger.info("Reset Solr Flag to 2 %s" % product.id)
+ manufacture.cache_reset_status = 'done'
@api.onchange('x_name','image_promotion_1','image_promotion_2')
def update_solr_flag(self):
diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv
index 295da4ee..2f70d737 100755
--- a/indoteknik_custom/security/ir.model.access.csv
+++ b/indoteknik_custom/security/ir.model.access.csv
@@ -17,4 +17,10 @@ access_dunning_run_line,access.dunning.run.line,model_dunning_run_line,,1,1,1,1
access_website_user_cart,access.website.user.cart,model_website_user_cart,,1,1,1,1
access_website_user_wishlist,access.website.user.wishlist,model_website_user_wishlist,,1,1,1,1
access_website_brand_homepage,access.website.brand.homepage,model_website_brand_homepage,,1,1,1,1
-access_website_categories_homepage,access.website.categories.homepage,model_website_categories_homepage,,1,1,1,1 \ No newline at end of file
+access_website_categories_homepage,access.website.categories.homepage,model_website_categories_homepage,,1,1,1,1
+access_sales_target,access.sales.target,model_sales_target,,1,1,1,1
+access_purchase_outstanding,access.purchase.outstanding,model_purchase_outstanding,,1,1,1,1
+access_sales_outstanding,access.sales.outstanding,model_sales_outstanding,,1,1,1,1
+access_customer_review,access.customer.review,model_customer_review,,1,1,1,1
+access_website_content_channel,access.website.content.channel,model_website_content_channel,,1,1,1,1
+access_website_content,access.website.content,model_website_content,,1,1,1,1 \ No newline at end of file
diff --git a/indoteknik_custom/views/customer_review.xml b/indoteknik_custom/views/customer_review.xml
new file mode 100644
index 00000000..7d7e66df
--- /dev/null
+++ b/indoteknik_custom/views/customer_review.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<odoo>
+ <data>
+ <record id="customer_review_action" model="ir.actions.act_window">
+ <field name="name">Customer Review</field>
+ <field name="res_model">customer.review</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <record id="customer_review_tree" model="ir.ui.view">
+ <field name="name">Customer Review</field>
+ <field name="model">customer.review</field>
+ <field name="arch" type="xml">
+ <tree>
+ <field name="sequence"/>
+ <field name="customer_name"/>
+ <field name="ulasan"/>
+ <field name="name"/>
+ <field name="jabatan"/>
+ <field name="status"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="customer_review_form" model="ir.ui.view">
+ <field name="name">Customer Review</field>
+ <field name="model">customer.review</field>
+ <field name="arch" type="xml">
+ <form>
+ <sheet>
+ <group>
+ <group>
+ <field name="sequence"/>
+ <field name="image"/>
+ <field name="customer_name"/>
+ <field name="ulasan"/>
+ <field name="name"/>
+ <field name="jabatan"/>
+ <field name="status"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <menuitem
+ id="customer_review"
+ name="Customer Review"
+ parent="website_sale.menu_orders"
+ sequence="2"
+ action="customer_review_action"
+ />
+ </data>
+</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/product_template.xml b/indoteknik_custom/views/product_template.xml
index b9b6ba0b..5fcb8b05 100755
--- a/indoteknik_custom/views/product_template.xml
+++ b/indoteknik_custom/views/product_template.xml
@@ -46,13 +46,30 @@
<field name="inherit_id" ref="website_sale.product_template_form_view"/>
<field name="arch" type="xml">
<field name="website_ribbon_id" position="after">
- <field name="last_calculate_rating" attrs="{'readonly': [('type', '=', 'product')]}"/>
- <field name="product_rating"/>
+ <field name="maker_code"/>
+ <field name="maker_name"/>
+ <field name="origin"/>
+ <field name="features"/>
+ <field name="usage"/>
+ <field name="specification"/>
+ <field name="material"/>
<field name="search_rank"/>
- <field name="web_price_sorting" attrs="{'readonly': [('type', '=', 'product')]}"/>
<field name="solr_flag"/>
</field>
</field>
</record>
+ <record id="product_variant_indoteknik" model="ir.ui.view">
+ <field name="name">Product Product</field>
+ <field name="model">product.product</field>
+ <field name="inherit_id" ref="product.product_variant_easy_edit_view"/>
+ <field name="arch" type="xml">
+ <field name="accurate_item_code" position="after">
+ <field name="features"/>
+ <field name="usage"/>
+ <field name="specification"/>
+ <field name="material"/>
+ </field>
+ </field>
+ </record>
</data>
</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/purchase_order.xml b/indoteknik_custom/views/purchase_order.xml
index fcd38677..c4a06a6c 100755
--- a/indoteknik_custom/views/purchase_order.xml
+++ b/indoteknik_custom/views/purchase_order.xml
@@ -71,7 +71,6 @@
<field name="inherit_id" ref="purchase.purchase_order_view_tree"/>
<field name="arch" type="xml">
<field name="invoice_status" position="after">
- <field name="procurement_status" />
<field name="po_status" />
</field>
</field>
diff --git a/indoteknik_custom/views/purchase_outstanding.xml b/indoteknik_custom/views/purchase_outstanding.xml
new file mode 100644
index 00000000..dc203744
--- /dev/null
+++ b/indoteknik_custom/views/purchase_outstanding.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+ <record id="purchase_outstanding_tree" model="ir.ui.view">
+ <field name="name">purchase.outstanding.tree</field>
+ <field name="model">purchase.outstanding</field>
+ <field name="arch" type="xml">
+ <tree create="false">
+ <field name="order_id"/>
+ <field name="partner_id"/>
+ <field name="user_id"/>
+ <field name="date_order"/>
+ <field name="po_state"/>
+ <field name="po_status"/>
+ <field name="product_id"/>
+ <field name="product_uom_qty"/>
+ <field name="qty_received"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="purchase_outstanding_form" model="ir.ui.view">
+ <field name="name">purchase.outstanding.form</field>
+ <field name="model">purchase.outstanding</field>
+ <field name="arch" type="xml">
+ <form create="false" edit="false">
+ <sheet>
+ <group>
+ <group>
+ <field name="order_id"/>
+ <field name="partner_id"/>
+ <field name="user_id"/>
+ <field name="date_order"/>
+ <field name="po_state"/>
+ <field name="po_status"/>
+ <field name="product_id"/>
+ </group>
+ <group>
+ <field name="product_uom_qty"/>
+ <field name="qty_received"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="view_purchase_outstanding_filter" model="ir.ui.view">
+ <field name="name">purchase.outstanding.list.select</field>
+ <field name="model">purchase.outstanding</field>
+ <field name="priority" eval="15"/>
+ <field name="arch" type="xml">
+ <search string="Search Purchase Outstanding">
+ <field name="order_id"/>
+ <field name="product_id"/>
+ </search>
+ </field>
+ </record>
+
+ <record id="purchase_outstanding_action" model="ir.actions.act_window">
+ <field name="name">Purchase Outstanding</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">purchase.outstanding</field>
+ <field name="search_view_id" ref="view_purchase_outstanding_filter"/>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <menuitem
+ id="menu_purchase_outstanding"
+ name="Purchase Outstanding"
+ parent="purchase.menu_purchase_products"
+ sequence="4"
+ action="purchase_outstanding_action"
+ />
+</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml
index ea0cc569..9dfd9805 100755
--- a/indoteknik_custom/views/sale_order.xml
+++ b/indoteknik_custom/views/sale_order.xml
@@ -57,6 +57,19 @@
<field name="effective_date" position="after">
<field name="carrier_id"/>
</field>
+
+ <page name="customer_signature" position="after">
+ <page string="Customer PO" name="customer_purchase_order">
+ <group>
+ <group>
+ <field name="partner_purchase_order_name" readonly="True"/>
+ <field name="partner_purchase_order_description" readonly="True"/>
+ <field name="partner_purchase_order_file" readonly="True"/>
+ </group>
+ </group>
+ </page>
+ </page>
+
</field>
</record>
</data>
@@ -72,5 +85,17 @@
</field>
</field>
</record>
+ <record id="sales_order_tree_view_inherit" model="ir.ui.view">
+ <field name="name">Sale Order</field>
+ <field name="model">sale.order</field>
+ <field name="inherit_id" ref="sale.view_order_tree"/>
+ <field name="arch" type="xml">
+ <field name="state" position="after">
+ <field name="approval_status" />
+ <field name="client_order_ref"/>
+ <field name="so_status"/>
+ </field>
+ </field>
+ </record>
</data>
</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/sales_outstanding.xml b/indoteknik_custom/views/sales_outstanding.xml
new file mode 100644
index 00000000..44c2603d
--- /dev/null
+++ b/indoteknik_custom/views/sales_outstanding.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+ <record id="sales_outstanding_tree" model="ir.ui.view">
+ <field name="name">sales.outstanding.tree</field>
+ <field name="model">sales.outstanding</field>
+ <field name="arch" type="xml">
+ <tree create="false">
+ <field name="order_id"/>
+ <field name="partner_id"/>
+ <field name="user_id"/>
+ <field name="date_order"/>
+ <field name="so_state"/>
+ <field name="so_status"/>
+ <field name="product_id"/>
+ <field name="product_uom_qty"/>
+ <field name="qty_delivered"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="sales_outstanding_form" model="ir.ui.view">
+ <field name="name">sales.outstanding.form</field>
+ <field name="model">sales.outstanding</field>
+ <field name="arch" type="xml">
+ <form create="false" edit="false">
+ <sheet>
+ <group>
+ <group>
+ <field name="order_id"/>
+ <field name="partner_id"/>
+ <field name="user_id"/>
+ <field name="date_order"/>
+ <field name="so_state"/>
+ <field name="so_status"/>
+ <field name="product_id"/>
+ </group>
+ <group>
+ <field name="product_uom_qty"/>
+ <field name="qty_delivered"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="view_sales_outstanding_filter" model="ir.ui.view">
+ <field name="name">sales.outstanding.list.select</field>
+ <field name="model">sales.outstanding</field>
+ <field name="priority" eval="15"/>
+ <field name="arch" type="xml">
+ <search string="Search Sales Outstanding">
+ <field name="order_id"/>
+ <field name="product_id"/>
+ </search>
+ </field>
+ </record>
+
+ <record id="sales_outstanding_action" model="ir.actions.act_window">
+ <field name="name">Sales Outstanding</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">sales.outstanding</field>
+ <field name="search_view_id" ref="view_sales_outstanding_filter"/>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <menuitem
+ id="menu_sales_outstanding"
+ name="Sales Outstanding"
+ parent="purchase.menu_purchase_products"
+ sequence="5"
+ action="sales_outstanding_action"
+ />
+</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/sales_target.xml b/indoteknik_custom/views/sales_target.xml
new file mode 100644
index 00000000..6ccea260
--- /dev/null
+++ b/indoteknik_custom/views/sales_target.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<odoo>
+ <data>
+ <record id="sales_target_action" model="ir.actions.act_window">
+ <field name="name">Sales Target</field>
+ <field name="res_model">sales.target</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <record id="sales_target_tree" model="ir.ui.view">
+ <field name="name">Sales Target</field>
+ <field name="model">sales.target</field>
+ <field name="arch" type="xml">
+ <tree>
+ <field name="partner_id"/>
+ <field name="period"/>
+ <field name="omset_last_year"/>
+ <field name="ongoing_omset_total"/>
+ <field name="target"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="sales_target_form" model="ir.ui.view">
+ <field name="name">Sales Target</field>
+ <field name="model">sales.target</field>
+ <field name="arch" type="xml">
+ <form>
+ <sheet>
+ <group>
+ <group>
+ <field name="partner_id"/>
+ <field name="period"/>
+ <field name="omset_last_year"/>
+ <field name="ongoing_omset_odoo"/>
+ <field name="ongoing_omset_accurate"/>
+ <field name="ongoing_omset_adempiere"/>
+ <field name="target"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+ <menuitem
+ id="sale_target_menu"
+ action="sales_target_action"
+ parent="sale.menu_sales_config"
+ sequence="2"
+ name="Sales Target"
+ />
+ </data>
+</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/stock_picking.xml b/indoteknik_custom/views/stock_picking.xml
index ce70fdd8..49e594b1 100644
--- a/indoteknik_custom/views/stock_picking.xml
+++ b/indoteknik_custom/views/stock_picking.xml
@@ -1,6 +1,19 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
+ <record id="stock_picking_tree_view_inherit" model="ir.ui.view">
+ <field name="name">Stock Picking</field>
+ <field name="model">stock.picking</field>
+ <field name="inherit_id" ref="stock.vpicktree"/>
+ <field name="arch" type="xml">
+ <field name="json_popover" position="after">
+ <field name="date_done"/>
+ <field name="driver_departure_date"/>
+ <field name="driver_arrival_date"/>
+ </field>
+ </field>
+ </record>
+
<record id="stock_picking_form_view_inherit" model="ir.ui.view">
<field name="name">Stock Picking</field>
<field name="model">stock.picking</field>
diff --git a/indoteknik_custom/views/website_content.xml b/indoteknik_custom/views/website_content.xml
new file mode 100644
index 00000000..e071134d
--- /dev/null
+++ b/indoteknik_custom/views/website_content.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+ <record id="website_content_tree" model="ir.ui.view">
+ <field name="name">website.content.tree</field>
+ <field name="model">website.content</field>
+ <field name="arch" type="xml">
+ <tree>
+ <field name="channel_id"/>
+ <field name="sequence"/>
+ <field name="slide_type"/>
+ <field name="name"/>
+ <field name="url"/>
+ <field name="status"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="website_content_form" model="ir.ui.view">
+ <field name="name">website.content.form</field>
+ <field name="model">website.content</field>
+ <field name="arch" type="xml">
+ <form>
+ <sheet>
+ <group>
+ <group>
+ <field name="channel_id"/>
+ <field name="sequence"/>
+ <field name="slide_type"/>
+ <field name="name"/>
+ <field name="url"/>
+ <field name="status"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="view_website_content_filter" model="ir.ui.view">
+ <field name="name">website.content.list.select</field>
+ <field name="model">website.content</field>
+ <field name="priority" eval="15"/>
+ <field name="arch" type="xml">
+ <search string="Search Content">
+ <field name="name"/>
+ </search>
+ </field>
+ </record>
+
+ <record id="website_content_action" model="ir.actions.act_window">
+ <field name="name">Website Content</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">website.content</field>
+ <field name="search_view_id" ref="view_website_content_filter"/>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <menuitem
+ id="menu_website_content"
+ name="Website Content"
+ parent="website_sale.menu_orders"
+ sequence="3"
+ action="website_content_action"
+ />
+</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/website_content_channel.xml b/indoteknik_custom/views/website_content_channel.xml
new file mode 100644
index 00000000..d1bc23fc
--- /dev/null
+++ b/indoteknik_custom/views/website_content_channel.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+ <record id="website_content_channel_tree" model="ir.ui.view">
+ <field name="name">website.content.channel.tree</field>
+ <field name="model">website.content.channel</field>
+ <field name="arch" type="xml">
+ <tree>
+ <field name="name"/>
+ <field name="visibility"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="website_content_channel_form" model="ir.ui.view">
+ <field name="name">website.content.channel.form</field>
+ <field name="model">website.content.channel</field>
+ <field name="arch" type="xml">
+ <form>
+ <sheet>
+ <group>
+ <group>
+ <field name="name"/>
+ <field name="description_html"/>
+ <field name="visibility"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="view_website_content_channel_filter" model="ir.ui.view">
+ <field name="name">website.content.channel.list.select</field>
+ <field name="model">website.content.channel</field>
+ <field name="priority" eval="15"/>
+ <field name="arch" type="xml">
+ <search string="Search Channel">
+ <field name="name"/>
+ </search>
+ </field>
+ </record>
+
+ <record id="website_content_channel_action" model="ir.actions.act_window">
+ <field name="name">Website Content Channel</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">website.content.channel</field>
+ <field name="search_view_id" ref="view_website_content_channel_filter"/>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <menuitem
+ id="menu_website_content_channel"
+ name="Website Content Channel"
+ parent="website_sale.menu_orders"
+ sequence="2"
+ action="website_content_channel_action"
+ />
+</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/x_manufactures.xml b/indoteknik_custom/views/x_manufactures.xml
index e7e1b85d..d122c6c1 100755
--- a/indoteknik_custom/views/x_manufactures.xml
+++ b/indoteknik_custom/views/x_manufactures.xml
@@ -22,6 +22,7 @@
<field name="x_short_desc"/>
<field name="x_manufacture_level"/>
<field name="x_manufacture_service_center"/>
+ <field name="cache_reset_status"/>
</tree>
</field>
</record>
@@ -40,6 +41,7 @@
<field name="x_short_desc"/>
<field name="x_manufacture_level"/>
<field name="x_produk_aksesoris_sparepart"/>
+ <field name="cache_reset_status"/>
</group>
<group>
<field name="x_logo_manufacture" widget="image"/>