summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-02-25 11:53:29 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-02-25 11:53:29 +0700
commit13c90b5a95391d797b89c39b90c1430400ed29b7 (patch)
tree1df668fee68e72a76cbcc5255e5d533b3721d190
parent0f7f7fa273295fadde403c4ff9333b3bbe14489a (diff)
parent029e8fce907060de2a2514b5abc731f4cd9da96e (diff)
Merge branch 'staging' into release
-rw-r--r--indoteknik_api/controllers/api_v1/midtrans.py25
-rw-r--r--indoteknik_api/controllers/api_v1/partner.py61
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py36
-rw-r--r--indoteknik_api/controllers/api_v1/user.py32
-rw-r--r--indoteknik_api/models/account_move.py3
-rw-r--r--indoteknik_api/models/res_users.py7
-rw-r--r--indoteknik_api/models/sale_order.py29
-rwxr-xr-xindoteknik_custom/__manifest__.py3
-rwxr-xr-xindoteknik_custom/models/__init__.py2
-rw-r--r--indoteknik_custom/models/midtrans.py25
-rw-r--r--indoteknik_custom/models/res_partner.py1
-rw-r--r--indoteknik_custom/models/res_partner_company_type.py7
-rwxr-xr-xindoteknik_custom/models/sale_order.py2
-rw-r--r--indoteknik_custom/models/user_company_request.py31
-rwxr-xr-xindoteknik_custom/security/ir.model.access.csv4
-rw-r--r--indoteknik_custom/views/midtrans.xml15
-rw-r--r--indoteknik_custom/views/res_partner.xml3
-rw-r--r--indoteknik_custom/views/res_partner_company_type.xml43
-rwxr-xr-xindoteknik_custom/views/sale_order.xml7
-rw-r--r--indoteknik_custom/views/user_company_request.xml60
20 files changed, 372 insertions, 24 deletions
diff --git a/indoteknik_api/controllers/api_v1/midtrans.py b/indoteknik_api/controllers/api_v1/midtrans.py
index fdc801d3..49ebce0f 100644
--- a/indoteknik_api/controllers/api_v1/midtrans.py
+++ b/indoteknik_api/controllers/api_v1/midtrans.py
@@ -8,19 +8,20 @@ class Midtrans(controller.Controller):
prefix = '/api/v1/'
@http.route(prefix + 'midtrans/notification', auth='none', type='json', csrf=False, cors='*', methods=['POST', 'OPTIONS'])
- def notification(self, **kw):
+ def midtrans_notification(self, **kw):
json_raw = json.loads(request.httprequest.data)
- trx_status = json.loads(request.httprequest.data)['transaction_status']
- order_no = json.loads(request.httprequest.data)['order_id']
+ json_dump = json.dumps(json_raw, indent=4, sort_keys=True)
+ # trx_status = json.loads(request.httprequest.data)['transaction_status']
+ # order_no = json.loads(request.httprequest.data)['order_id']
- query = [('name', '=', order_no)]
- order = request.env['sale.order'].sudo().search(query, limit=1)
- order.payment_status = trx_status
+ # query = [('name', '=', order_no)]
+ # order = request.env['sale.order'].sudo().search(query, limit=1)
+ # order.payment_status = trx_status
request.env['midtrans.notification'].create([{
- 'sale_order_id': order.id,
- 'json_raw': json_raw,
- 'payment_status': trx_status,
+ # 'sale_order_id': order.id,
+ 'json_raw': json_dump,
+ # 'payment_status': trx_status,
}])
return
@@ -28,15 +29,17 @@ class Midtrans(controller.Controller):
@http.route(prefix + 'midtrans/recurring', auth='none', type='json', csrf=False, cors='*', methods=['POST', 'OPTIONS'])
def recurring(self, **kw):
json_raw = json.loads(request.httprequest.data)
+ json_dump = json.dumps(json_raw, indent=4, sort_keys=True)
request.env['midtrans.recurring'].create([{
- 'json_raw': json_raw,
+ 'json_raw': json_dump,
}])
return
@http.route(prefix + 'midtrans/payaccount', auth='none', type='json', csrf=False, cors='*', methods=['POST', 'OPTIONS'])
def payaccount(self, **kw):
json_raw = json.loads(request.httprequest.data)
+ json_dump = json.dumps(json_raw, indent=4, sort_keys=True)
request.env['midtrans.account'].create([{
- 'json_raw': json_raw,
+ 'json_raw': json_dump,
}])
return \ No newline at end of file
diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py
index 09b3caa0..ba59a1ce 100644
--- a/indoteknik_api/controllers/api_v1/partner.py
+++ b/indoteknik_api/controllers/api_v1/partner.py
@@ -81,3 +81,64 @@ class Partner(controller.Controller):
'id': partner.id,
})
+ @http.route(prefix + 'partner/<id>', auth='public', methods=['PUT', 'OPTIONS'], csrf=False)
+ def write_partner_by_id(self, **kw):
+ user_token = self.authenticate()
+ if not user_token:
+ return self.unauthorized_response()
+
+ params = self.get_request_params(kw, {
+ 'id': ['required', 'number'],
+ 'name': [],
+ 'company_type_id': ['number'],
+ 'industry_id': ['number'],
+ 'tax_name': ['alias:nama_wajib_pajak'],
+ 'npwp': [],
+ })
+
+ if not params['valid']:
+ return self.response(code=400, description=params)
+
+ partner = request.env[self._name].search([('id', '=', params['value']['id'])], limit=1)
+ if not partner:
+ return self.response(code=404, description='User not found')
+
+ if user_token['partner_id'] not in self.get_partner_child_ids(partner.id):
+ return self.unauthorized_response()
+
+ partner.write(params['value'])
+
+ return self.response({
+ 'id': partner.id
+ })
+
+ @http.route(prefix + 'partner/industry', auth='public', methods=['GET', 'OPTIONS'])
+ def get_partner_industry(self):
+ if not self.authenticate():
+ return self.response(code=401, description='Unauthorized')
+
+ partner_industry = request.env['res.partner.industry'].search([])
+ data = []
+ for industry in partner_industry:
+ data.append({
+ 'id': industry.id,
+ 'name': industry.name
+ })
+
+ return self.response(data)
+
+ @http.route(prefix + 'partner/company_type', auth='public', methods=['GET', 'OPTIONS'])
+ def get_partner_company_type(self):
+ if not self.authenticate():
+ return self.response(code=401, description='Unauthorized')
+
+ partner_company_type = request.env['res.partner.company_type'].search([])
+ data = []
+ for company_type in partner_company_type:
+ data.append({
+ 'id': company_type.id,
+ 'name': company_type.name
+ })
+
+ return self.response(data)
+
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index 1c67d6c5..15dcf0ba 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -36,10 +36,14 @@ class SaleOrder(controller.Controller):
data.append({
'id': sale.id,
'name': sale.name,
- 'amount_total': sale.amount_total,
+ 'date_order': self.time_to_str(sale.date_order, '%d/%m/%Y %H:%M:%S'),
'state': sale.state,
+ 'amount_untaxed': sale.amount_untaxed,
+ 'amount_tax': sale.amount_tax,
+ 'amount_total': sale.amount_total,
'product_name': product_name,
'product_not_in_id': product_not_in_id,
+ 'details': [request.env['sale.order.line'].api_single_response(x, context='with_detail') for x in sale.order_line]
})
return self.response(data)
@@ -106,6 +110,34 @@ class SaleOrder(controller.Controller):
return self.response(data)
+ @http.route(PREFIX_PARTNER + 'sale_order/<id>/checkout', auth='public', method=['POST', 'OPTIONS'], csrf=False)
+ def partner_checkout_sale_order_by_id(self, **kw):
+ user_token = self.authenticate()
+ if not user_token:
+ return self.unauthorized_response()
+
+ params = self.get_request_params(kw, {
+ 'partner_id': ['number'],
+ 'id': ['number']
+ })
+ if not user_token['partner_id'] == params['value']['partner_id']:
+ return self.unauthorized_response()
+ if not params['valid']:
+ return self.response(code=400, description=params)
+
+ partner_child_ids = self.get_partner_child_ids(params['value']['partner_id'])
+ domain = [
+ ('id', '=', params['value']['id']),
+ ('partner_id', 'in', partner_child_ids)
+ ]
+ data = {}
+ sale_order = request.env['sale.order'].search(domain)
+ if sale_order:
+ sale_order.approval_status = 'pengajuan1'
+ data = request.env['sale.order'].api_v1_single_response(sale_order, context='with_detail')
+
+ return self.response(data)
+
@http.route(PREFIX_PARTNER + 'sale_order/<id>/upload_po', auth='public', method=['POST', 'OPTIONS'], csrf=False)
def partner_upload_po_sale_order(self, **kw):
user_token = self.authenticate()
@@ -187,7 +219,7 @@ class SaleOrder(controller.Controller):
if not user_token['partner_id'] == params['value']['partner_id']:
return self.unauthorized_response()
if not params['valid']:
- return self.response(code=400, description=params)
+ return self.response(code=400, description=params)
partner_child_ids = self.get_partner_child_ids(params['value']['partner_id'])
domain = [
diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py
index 17bc931e..800f6bf1 100644
--- a/indoteknik_api/controllers/api_v1/user.py
+++ b/indoteknik_api/controllers/api_v1/user.py
@@ -3,6 +3,7 @@ from odoo import http
from odoo.http import request
from odoo.tools.config import config
import random, string
+from difflib import SequenceMatcher
class User(controller.Controller):
@@ -62,20 +63,43 @@ class User(controller.Controller):
return self.response(code=400, description='email, name and password is required')
user = self.get_user_by_email(email)
-
if user:
return self.response({
'register': False,
'reason': 'EMAIL_USED'
})
-
- user = request.env['res.users'].create({
+
+ user_data = {
'name': name,
'login': email,
'password': password,
'active': False,
'sel_groups_1_9_10': 9
- })
+ }
+
+ user = request.env['res.users'].create(user_data)
+
+ company = kw.get('company', False)
+ if company:
+ parameter = [
+ ('company_type', '=', 'company'),
+ ('name', 'ilike', company)
+ ]
+ match_company = request.env['res.partner'].search(parameter, limit=1)
+ match_ratio = 0
+ if match_company:
+ match_ratio = SequenceMatcher(None, match_company.name, company).ratio()
+ if match_ratio > 0.7:
+ request.env['user.company.request'].create({
+ 'user_id': user.partner_id.id,
+ 'user_company_id': match_company.id,
+ 'user_input': company
+ })
+ else:
+ new_company = request.env['res.partner'].create({
+ 'name': company
+ })
+ user.parent_id = new_company.id
return self.response({'register': True})
diff --git a/indoteknik_api/models/account_move.py b/indoteknik_api/models/account_move.py
index 5c31f010..9bbe8c94 100644
--- a/indoteknik_api/models/account_move.py
+++ b/indoteknik_api/models/account_move.py
@@ -15,7 +15,7 @@ class AccountMove(models.Model):
'sales': account_move.invoice_user_id.name,
'amount_total': account_move.amount_total,
'amount_residual': account_move.amount_residual,
- 'invoice_date': '',
+ 'invoice_date': account_move.invoice_date.strftime('%d/%m/%Y') or '',
'efaktur': True if account_move.efaktur_document else False,
}
if isinstance(object, datetime.date):
@@ -31,7 +31,6 @@ class AccountMove(models.Model):
'sales': account_move.invoice_user_id.name,
'amount_total': account_move.amount_total,
'amount_residual': account_move.amount_residual,
- 'invoice_date': account_move.invoice_date.strftime('%d/%m/%Y') or '',
'invoice_date_due': account_move.invoice_date_due.strftime('%d/%m/%Y') or '',
'customer': res_users.api_address_response(account_move.partner_id),
'products': [],
diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py
index 99a3838d..5032f3af 100644
--- a/indoteknik_api/models/res_users.py
+++ b/indoteknik_api/models/res_users.py
@@ -7,6 +7,7 @@ class ResUsers(models.Model):
def api_single_response(self, res_user, with_detail=''):
data = {
'id': res_user.id,
+ 'parent_id': res_user.parent_id.id or False,
'partner_id': res_user.partner_id.id,
'name': res_user.name,
'email': res_user.login,
@@ -32,7 +33,11 @@ class ResUsers(models.Model):
'city': None,
'district': None,
'sub_district': None,
- 'zip': user.zip or ''
+ 'zip': user.zip or '',
+ 'company_type_id': user.company_type_id.id or None,
+ 'industry_id': user.industry_id.id or None,
+ 'tax_name': user.nama_wajib_pajak or '',
+ 'npwp': user.npwp or '',
}
if user.kota_id:
diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py
index c3f3dccb..ca6baff0 100644
--- a/indoteknik_api/models/sale_order.py
+++ b/indoteknik_api/models/sale_order.py
@@ -24,9 +24,19 @@ class SaleOrder(models.Model):
data['status'] = 'waiting'
if sale_order.state == 'sale':
data['status'] = 'sale'
+ picking_count = {
+ 'assigned': 0,
+ 'done': 0,
+ }
for picking in sale_order.picking_ids:
- if picking.state == 'assigned':
- data['status'] = 'shipping'
+ if picking.state in ['confirmed', 'assigned']:
+ picking_count['assigned'] += 1
+ if picking.state == 'done':
+ picking_count['done'] += 1
+ if picking_count['done'] > 0:
+ data['status'] = 'shipping'
+ if picking_count['assigned'] > 0:
+ data['status'] = 'partial_shipping'
if sale_order.state == 'done':
data['status'] = 'done'
@@ -53,3 +63,18 @@ class SaleOrder(models.Model):
data_with_detail['invoices'].append(self.env['account.move'].api_v1_single_response(invoice))
data.update(data_with_detail)
return data
+
+
+class SaleOrderLine(models.Model):
+ _inherit = 'sale.order.line'
+
+ def api_single_response(self, sale_order_line, context=False):
+ data = {
+ 'image': self.env['ir.attachment'].api_image('product.template', 'image_128', sale_order_line.product_id.product_tmpl_id.id),
+ 'item_code': sale_order_line.product_id.default_code,
+ 'product_name': sale_order_line.product_id.name,
+ 'price_before_discount': sale_order_line.price_unit * sale_order_line.product_uom_qty,
+ 'price_after_discount': sale_order_line.price_total,
+ 'tax': sale_order_line.price_tax
+ }
+ return data
diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py
index a794a822..449fd09c 100755
--- a/indoteknik_custom/__manifest__.py
+++ b/indoteknik_custom/__manifest__.py
@@ -16,6 +16,7 @@
'views/delivery_order.xml',
'views/product_pricelist.xml',
'views/res_groups.xml',
+ 'views/res_partner_company_type.xml',
'views/res_partner.xml',
'views/product_pricelist_item.xml',
'views/product_public_category.xml',
@@ -25,6 +26,7 @@
'views/sale_monitoring.xml',
'views/sale_monitoring_detail.xml',
'views/user_activity_log.xml',
+ 'views/user_company_request.xml',
'views/vit_kelurahan.xml',
'views/vit_kecamatan.xml',
'views/vit_kota.xml',
@@ -62,6 +64,7 @@
'views/leads_monitoring.xml',
'views/ip_lookup.xml',
'views/wati.xml',
+ 'views/midtrans.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 62a024e3..ebbf2e09 100755
--- a/indoteknik_custom/models/__init__.py
+++ b/indoteknik_custom/models/__init__.py
@@ -19,6 +19,7 @@ from . import purchase_order_line
from . import purchase_order
from . import purchase_outstanding
from . import purchase_pricelist
+from . import res_partner_company_type
from . import res_partner
from . import res_users
from . import sale_monitoring_detail
@@ -32,6 +33,7 @@ from . import stock_picking_type
from . import stock_picking
from . import stock_vendor
from . import user_activity_log
+from . import user_company_request
from . import users
from . import website_brand_homepage
from . import website_categories_homepage
diff --git a/indoteknik_custom/models/midtrans.py b/indoteknik_custom/models/midtrans.py
index 76dee447..c99c8410 100644
--- a/indoteknik_custom/models/midtrans.py
+++ b/indoteknik_custom/models/midtrans.py
@@ -1,5 +1,6 @@
from odoo import fields, models, api
import logging
+import json
_logger = logging.getLogger(__name__)
@@ -25,6 +26,30 @@ class MidtransNotification(models.Model):
], string='Payment Status',
help='Payment Gateway Status / Midtrans / Web, https://docs.midtrans.com/en/after-payment/status-cycle')
+ def _parse_notification(self):
+ query = [
+ ('payment_status', '=', False)
+ ]
+ notifications = self.env['midtrans.notification'].search(query, order='id')
+ for notif in notifications:
+ payment_status = json.loads(notif.json_raw)['transaction_status']
+ payment_type = json.loads(notif.json_raw)['payment_type']
+ gross_amount = json.loads(notif.json_raw)['gross_amount']
+ order_id = json.loads(notif.json_raw)['order_id']
+
+ orders = order_id.split('_')
+ order = orders[0].replace('-', '/')
+ sale_order = self.env['sale.order'].search([('name', '=', order)], limit=1)
+
+ notif.payment_status = payment_status
+ notif.sale_order_id = sale_order.id
+
+ sale_order.payment_type = payment_type
+ sale_order.gross_amount = gross_amount
+ sale_order.payment_status = payment_status
+
+ _logger.info('Success Parsing Midtrans Notification %s' % notif.id)
+
class MidtransRecurring(models.Model):
_name = 'midtrans.recurring'
diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py
index 403245fb..1cdf7c72 100644
--- a/indoteknik_custom/models/res_partner.py
+++ b/indoteknik_custom/models/res_partner.py
@@ -5,3 +5,4 @@ class ResPartner(models.Model):
_inherit = 'res.partner'
reference_number = fields.Char(string="Reference Number")
+ company_type_id = fields.Many2one('res.partner.company_type', string='Company Type')
diff --git a/indoteknik_custom/models/res_partner_company_type.py b/indoteknik_custom/models/res_partner_company_type.py
new file mode 100644
index 00000000..2bd356a1
--- /dev/null
+++ b/indoteknik_custom/models/res_partner_company_type.py
@@ -0,0 +1,7 @@
+from odoo import models, fields
+
+
+class ResPartnerCompanyType(models.Model):
+ _name = 'res.partner.company_type'
+
+ name = fields.Char('Name') \ No newline at end of file
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index ae769ae7..2dcfa718 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -69,6 +69,8 @@ class SaleOrder(models.Model):
('authorize', 'Authorize'),
], string='Payment Status', help='Payment Gateway Status / Midtrans / Web, https://docs.midtrans.com/en/after-payment/status-cycle')
date_doc_kirim = fields.Datetime(string='Tanggal Kirim di SJ', help="Tanggal Kirim di cetakan SJ yang terakhir, tidak berpengaruh ke Accounting")
+ payment_type = fields.Char(string='Payment Type', help='Jenis pembayaran dengan Midtrans')
+ gross_amount = fields.Float(string='Gross Amount', help='Jumlah pembayaran yang dilakukan dengan Midtrans')
@api.model
def _generate_so_access_token(self, limit=50):
diff --git a/indoteknik_custom/models/user_company_request.py b/indoteknik_custom/models/user_company_request.py
new file mode 100644
index 00000000..2467261a
--- /dev/null
+++ b/indoteknik_custom/models/user_company_request.py
@@ -0,0 +1,31 @@
+from odoo import models, fields
+from odoo.exceptions import UserError
+
+
+class UserCompanyRequest(models.Model):
+ _name = 'user.company.request'
+ _rec_name = 'user_id'
+
+ user_id = fields.Many2one('res.partner', string='User')
+ user_company_id = fields.Many2one('res.partner', string='Company')
+ user_input = fields.Char(string='User Input')
+ is_approve = fields.Selection([
+ ('approved', 'Approve'),
+ ('rejected', 'Reject'),
+ ], string='Approval')
+
+ def write(self, vals):
+ is_approve = vals.get('is_approve')
+ if self.is_approve and is_approve:
+ raise UserError('Tidak dapat mengubah approval yang sudah diisi')
+
+ if not self.is_approve and is_approve:
+ if is_approve == 'approved':
+ self.user_id.parent_id = self.user_company_id.id
+ else:
+ new_company = self.env['res.partner'].create({
+ 'name': self.user_input
+ })
+ self.user_id.parent_id = new_company.id
+ return super(UserCompanyRequest, self).write(vals)
+ \ No newline at end of file
diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv
index 977f3a1b..d5142381 100755
--- a/indoteknik_custom/security/ir.model.access.csv
+++ b/indoteknik_custom/security/ir.model.access.csv
@@ -33,4 +33,6 @@ access_midtrans_recurring,access.midtrans.recurring,model_midtrans_recurring,,1,
access_midtrans_account,access.midtrans.account,model_midtrans_account,,1,1,1,1
access_ip_lookup,access.ip.lookup,model_ip_lookup,,1,1,1,1
access_ip_lookup_line,access.ip.lookup.line,model_ip_lookup_line,,1,1,1,1
-access_wati_notification,access.wati.notification,model_wati_notification,,1,1,1,1 \ No newline at end of file
+access_wati_notification,access.wati.notification,model_wati_notification,,1,1,1,1
+access_user_company_request,access.user.company.request,model_user_company_request,,1,1,1,1
+access_res_partner_company_type,access.res.partner.company_type,model_res_partner_company_type,,1,1,1,1 \ No newline at end of file
diff --git a/indoteknik_custom/views/midtrans.xml b/indoteknik_custom/views/midtrans.xml
new file mode 100644
index 00000000..1773b9fd
--- /dev/null
+++ b/indoteknik_custom/views/midtrans.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<odoo>
+ <record id="cron_midtrans_parsing" model="ir.cron">
+ <field name="name">Midtrans: Parsing Notification</field>
+ <field name="interval_number">17</field>
+ <field name="interval_type">minutes</field>
+ <field name="numbercall">-1</field>
+ <field name="doall" eval="False"/>
+ <field name="model_id" ref="model_midtrans_notification"/>
+ <field name="code">model._parse_notification()</field>
+ <field name="state">code</field>
+ <field name="priority">100</field>
+ <field name="active">False</field>
+ </record>
+</odoo>
diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml
index 673718c4..47f41ab2 100644
--- a/indoteknik_custom/views/res_partner.xml
+++ b/indoteknik_custom/views/res_partner.xml
@@ -9,6 +9,9 @@
<field name="vat" position="after">
<field name="reference_number"/>
</field>
+ <field name="industry_id" position="after">
+ <field name="company_type_id"/>
+ </field>
</field>
</record>
</data>
diff --git a/indoteknik_custom/views/res_partner_company_type.xml b/indoteknik_custom/views/res_partner_company_type.xml
new file mode 100644
index 00000000..ed21c1c9
--- /dev/null
+++ b/indoteknik_custom/views/res_partner_company_type.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<odoo>
+ <record id="res_partner_company_type_tree" model="ir.ui.view">
+ <field name="name">res.partner.company_type.tree</field>
+ <field name="model">res.partner.company_type</field>
+ <field name="arch" type="xml">
+ <tree>
+ <field name="name"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="res_partner_company_type_form" model="ir.ui.view">
+ <field name="name">res.partner.company_type.form</field>
+ <field name="model">res.partner.company_type</field>
+ <field name="arch" type="xml">
+ <form>
+ <sheet>
+ <group>
+ <group>
+ <field name="name"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_res_partner_company_type" model="ir.actions.act_window">
+ <field name="name">Company Type</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">res.partner.company_type</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <menuitem
+ id="menu_res_partner_company_type"
+ name="Company Type"
+ parent="contacts.res_partner_menu_config"
+ sequence="2"
+ action="action_res_partner_company_type"
+ />
+</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml
index ff684451..d6df24a0 100755
--- a/indoteknik_custom/views/sale_order.xml
+++ b/indoteknik_custom/views/sale_order.xml
@@ -69,13 +69,18 @@
</field>
<page name="customer_signature" position="after">
- <page string="Customer PO" name="customer_purchase_order">
+ <page string="Website" 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>
+ <field name="gross_amount" readonly="True"/>
+ <field name="payment_type" readonly="True"/>
+ <field name="payment_status" readonly="True"/>
+ </group>
</group>
</page>
</page>
diff --git a/indoteknik_custom/views/user_company_request.xml b/indoteknik_custom/views/user_company_request.xml
new file mode 100644
index 00000000..2efc1e9b
--- /dev/null
+++ b/indoteknik_custom/views/user_company_request.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<odoo>
+ <record id="user_company_request_tree" model="ir.ui.view">
+ <field name="name">user.company.request.tree</field>
+ <field name="model">user.company.request</field>
+ <field name="arch" type="xml">
+ <tree create="0" default_order="is_approve desc">
+ <field name="user_id"/>
+ <field name="user_company_id"/>
+ <field name="user_input"/>
+ <field
+ name="is_approve"
+ widget="badge"
+ decoration-success="is_approve == 'approved'"
+ decoration-danger="is_approve == 'rejected'"
+ />
+ <field name="create_date"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="user_company_request_form" model="ir.ui.view">
+ <field name="name">user.company.request.form</field>
+ <field name="model">user.company.request</field>
+ <field name="arch" type="xml">
+ <form create="0">
+ <sheet>
+ <group>
+ <group>
+ <field name="user_id" readonly="1"/>
+ <field name="user_company_id" readonly="1"/>
+ <field name="user_input" readonly="1"/>
+ <field
+ name="is_approve"
+ required="1"
+ decoration-success="is_approve == 'approved'"
+ decoration-danger="is_approve == 'rejected'"
+ />
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_user_company_request" model="ir.actions.act_window">
+ <field name="name">User Company Request</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">user.company.request</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <menuitem
+ id="menu_user_company_request"
+ name="User Company Request"
+ parent="contacts.menu_contacts"
+ sequence="3"
+ action="action_user_company_request"
+ />
+</odoo> \ No newline at end of file