Commit a536de07 by aa.gusti

penambahan kategori dan objek pajak

1 parent d0c924cf
......@@ -83,3 +83,46 @@ class Company(models.Model):
def _onchange_country_id(self):
if not self.country_id or self.country_id != self.state_id.country_id:
self.state_id = False
def _get_company_address_field_names(self):
""" Return a list of fields coming from the address partner to match
on company address fields. Fields are labeled same on both models. """
return ['street', 'street2', 'city', 'zip', 'state_id', 'country_id']
def _get_company_address_update(self, partner):
return dict((fname, partner[fname])
for fname in self._get_company_address_field_names())
# TODO @api.depends(): currently now way to formulate the dependency on the
# partner's contact address
def _compute_address(self):
for company in self.filtered(lambda company: company.partner_id):
address_data = company.partner_id.sudo().address_get(adr_pref=['contact'])
if address_data['contact']:
partner = company.partner_id.browse(address_data['contact']).sudo()
company.update(company._get_company_address_update(partner))
def _inverse_street(self):
for company in self:
company.partner_id.street = company.street
def _inverse_street2(self):
for company in self:
company.partner_id.street2 = company.street2
def _inverse_zip(self):
for company in self:
company.partner_id.zip = company.zip
def _inverse_city(self):
for company in self:
company.partner_id.city = company.city
def _inverse_state(self):
for company in self:
company.partner_id.state_id = company.state_id
def _inverse_country(self):
for company in self:
company.partner_id.country_id = company.country_id
......@@ -15,15 +15,16 @@ Menydiakan module untuk followup Wajib Pajak/Retribusi.
'category': 'Indonesia Goverment',
'website': 'https://opensipkd.com',
'images': [],
'depends': ['id_gov'],
'depends': ['id_gov', 'product'],
'data': [
'security/company_security.xml',
'security/account_security.xml',
# 'views/view_config.xml',
'views/partner.xml',
# 'views/objek_pajak.xml',
'views/product.xml',
# 'views/district.xml',
'views/sudut_pandang.xml',
# 'views/company.xml',
'views/pdl_kab_menus.xml',
'views/menus.xml',
# 'security/account_security.xml',
# 'security/ir.model.access.csv',
],
......
from . import pdl_sudut_pandang
from . import partner
# from . import product_op
from . import product
......@@ -39,6 +39,7 @@ class ResPartner(models.Model):
domain="[('sub_district_id', '=?', sub_district_id)]"
)
def _get_name_search_order_by_fields(self):
res = super()._get_name_search_order_by_fields()
partner_search_mode = self.env.context.get('res_partner_search_mode')
......
import base64
import io
import os
from random import randrange
from odoo import models, fields, api, tools, _
from odoo.exceptions import UserError, ValidationError
from odoo.modules import get_resource_path
from PIL import Image
import logging
_logger = logging.getLogger(__name__)
TYPE_LIST = [('hotel', 'Hotel'),
('resto', 'Restaurant'),
('hibur', 'Hiburan'),
('ppj', 'Penerangan Jalan'),
('golc', 'Mineral dan Batuan'),
('reklame', 'Reklame'),
('walet', 'Sarang Burung Walet'),
('abt', 'Air Bawah Tanah'),
('parkir', 'Parkir'),
]
class Product(models.Model):
_inherit = "product.template"
name = fields.Char(related='partner_id.name', string='Company Name',
required=True, store=True, readonly=False)
type = fields.Selection(
selection_add=TYPE_LIST, string='Product Type',
help='Pilih type objek pajak', default='hotel', required=True,
ondelete={
'hotel': 'set default',
'resto': 'set default',
'hibur': 'set default',
'ppj': 'set default',
'golc': 'set default',
'reklame': 'set default',
'walet': 'set default',
'abt': 'set default',
'parkir': 'set default'
})
partner_id = fields.Many2one('res.partner', string="Wajib Pajak")
district_id = fields.Many2one(
'res.district', compute='_compute_address', inverse='_inverse_district',
string="Kab/Kota", domain="[('state_id', '=?', state_id)]"
)
sub_district_id = fields.Many2one(
'res.district.sub', compute='_compute_address', inverse='_inverse_sub_district',
string="Kecamatan", domain="[('district_id', '=?', district_id)]"
)
village_id = fields.Many2one(
'res.district.village', compute='_compute_address', inverse='_inverse_village',
string="Desa/Kelurahan", domain="[('sub_district_id', '=?', sub_district_id)]"
)
company_id = fields.Many2one('res.company', related='partner_id.company_id',
string='Lembaga/Organisasi', required=True,
store=True, readonly=False,
default=lambda self: self.env.company.id
if not self.company_id else False
)
def copy(self, default=None):
raise UserError(_('Duplicating a company is not allowed. Please create a new company instead.'))
def _get_logo(self):
return base64.b64encode(
open(os.path.join(tools.config['root_path'], 'addons', 'base', 'static', 'img', 'res_company_logo.png'),
'rb').read())
def _get_default_favicon(self, original=False):
img_path = get_resource_path('web', 'static/src/img/favicon.ico')
with tools.file_open(img_path, 'rb') as f:
if original:
return base64.b64encode(f.read())
# Modify the source image to add a colored bar on the bottom
# This could seem overkill to modify the pixels 1 by 1, but
# Pillow doesn't provide an easy way to do it, and this
# is acceptable for a 16x16 image.
color = (randrange(32, 224, 24), randrange(32, 224, 24), randrange(32, 224, 24))
original = Image.open(f)
new_image = Image.new('RGBA', original.size)
height = original.size[1]
width = original.size[0]
bar_size = 1
for y in range(height):
for x in range(width):
pixel = original.getpixel((x, y))
if height - bar_size <= y + 1 <= height:
new_image.putpixel((x, y), (color[0], color[1], color[2], 255))
else:
new_image.putpixel((x, y), (pixel[0], pixel[1], pixel[2], pixel[3]))
stream = io.BytesIO()
new_image.save(stream, format="ICO")
return base64.b64encode(stream.getvalue())
@tools.ormcache()
def _get_default_category_id(self):
# Deletion forbidden (at least through unlink)
return self.env.ref('product.product_category_all')
logo = fields.Binary(related='partner_id.image_1920', default=_get_logo, string="Company Logo", readonly=False)
# logo_web: do not store in attachments, since the image is retrieved in SQL for
# performance reasons (see addons/web/controllers/main.py, Binary.product_logo)
logo_web = fields.Binary(compute='_compute_logo_web', store=True, attachment=False)
# currency_id = fields.Many2one('res.currency', string='Currency', required=True,
# default=lambda self: self._default_currency_id())
# user_ids = fields.Many2many('res.users', 'res_product_users_rel', 'cid', 'user_id', string='Accepted Users')
street = fields.Char(compute='_compute_address', inverse='_inverse_street')
street2 = fields.Char(compute='_compute_address', inverse='_inverse_street2')
zip = fields.Char(compute='_compute_address', inverse='_inverse_zip')
city = fields.Char(compute='_compute_address', inverse='_inverse_city')
state_id = fields.Many2one(
'res.country.state', compute='_compute_address', inverse='_inverse_state',
string="Fed. State", domain="[('country_id', '=?', country_id)]"
)
country_id = fields.Many2one('res.country', compute='_compute_address', inverse='_inverse_country',
string="Country")
email = fields.Char(compute='_compute_address', inverse='_inverse_email')
phone = fields.Char(compute='_compute_address', inverse='_inverse_phone')
website = fields.Char(compute='_compute_address', inverse='_inverse_website')
vat = fields.Char(related='partner_id.vat', string="Tax ID", readonly=False)
categ_id = fields.Many2one(
'product.category', 'Product Category',
change_default=True, default=_get_default_category_id, group_expand='_read_group_categ_id',
required=True, help="Select category for the current product",
domain="[('type', '=?', type)]",
)
def _inverse_email(self):
for product in self:
product.partner_id.email = product.email
def _inverse_phone(self):
for product in self:
product.partner_id.phone = product.phone
def _inverse_website(self):
for product in self:
product.partner_id.website = product.website
def _inverse_company(self):
for product in self:
product.partner_id.company_id = product.company_id
def _inverse_district(self):
for product in self:
product.partner_id.district_id = product.district_id
def _inverse_sub_district(self):
for product in self:
product.partner_id.sub_district_id = product.sub_district_id
def _inverse_village(self):
for product in self:
product.partner_id.village_id = product.village_id
def _inverse_street(self):
for product in self:
product.partner_id.street = product.street
def _inverse_street2(self):
for product in self:
product.partner_id.street2 = product.street2
def _inverse_zip(self):
for product in self:
product.partner_id.zip = product.zip
def _inverse_city(self):
for product in self:
product.partner_id.city = product.city
def _inverse_state(self):
for product in self:
product.partner_id.state_id = product.state_id
def _inverse_country(self):
for product in self:
product.partner_id.country_id = product.country_id
def _get_product_address_field_names(self):
""" Return a list of fields coming from the address partner to match
on product address fields. Fields are labeled same on both models. """
return ['street', 'street2', 'city', 'zip', 'state_id', 'country_id',
'district_id', 'sub_district_id', 'village_id']
@api.onchange('village_id')
def _onchange_village_id(self):
if self.village_id and self.village_id.sub_district_id != self.sub_district_id:
self.sub_district_id = self.village_id.sub_district_id
if self.village_id and self.village_id.zip and self.village_id.zip != self.zip:
self.zip = self.village_id.zip
@api.onchange('sub_district_id')
def _onchange_sub_district_id(self):
if self.sub_district_id and self.sub_district_id.district_id != self.district_id:
self.district_id = self.sub_district_id.district_id
if not self.sub_district_id or self.sub_district_id != self.village_id.sub_district_id:
self.village_id = False
@api.onchange('district_id')
def _onchange_district_id(self):
if self.district_id and self.district_id.state_id != self.state_id:
self.state_id = self.district_id.state_id
if not self.district_id or self.district_id != self.sub_district_id.district_id:
self.sub_district_id = False
@api.onchange('state_id')
def _onchange_state_id(self):
if self.state_id and self.state_id.country_id != self.country_id:
self.country_id = self.state_id.country_id
if not self.state_id or self.state_id != self.district_id.state_id:
self.district_id = False
@api.onchange('country_id')
def _onchange_country_id(self):
if not self.country_id or self.country_id != self.state_id.country_id:
self.state_id = False
def _get_product_address_update(self, partner):
return dict((fname, partner[fname])
for fname in self._get_product_address_field_names())
# TODO @api.depends(): currently now way to formulate the dependency on the
# partner's contact address
def _compute_address(self):
for product in self.filtered(lambda product: product.partner_id):
address_data = product.partner_id.sudo().address_get(adr_pref=['contact'])
if address_data['contact']:
partner = product.partner_id.browse(address_data['contact']).sudo()
product.update(product._get_product_address_update(partner))
@api.depends('partner_id.image_1920')
def _compute_logo_web(self):
for product in self:
product.logo_web = tools.image_process(product.partner_id.image_1920, size=(180, 0))
@api.onchange('state_id')
def _onchange_state(self):
if self.state_id.country_id:
self.country_id = self.state_id.country_id
# @api.onchange('country_id')
# def _onchange_country_id(self):
# if self.country_id:
# self.currency_id = self.country_id.currency_id
# @api.model
# def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
# context = dict(self.env.context)
# newself = self
# if context.pop('user_preference', None):
# # We browse as superuser. Otherwise, the user would be able to
# # select only the currently visible companies (according to rules,
# # which are probably to allow to see the child companies) even if
# # she belongs to some other companies.
# companies = self.env.user.product_ids
# args = (args or []) + [('id', 'in', companies.ids)]
# newself = newself.sudo()
# return super(Product, newself.with_context(context)). \
# _name_search(name=name, args=args, operator=operator,
# limit=limit, name_get_uid=name_get_uid)
# @api.model
# @api.returns('self', lambda value: value.id)
# def _product_default_get(self, object=False, field=False):
# """ Returns the user's product
# - Deprecated
# """
# _logger.warning("The method '_product_default_get' on res.product is deprecated and shouldn't be used
# anymore")
# return self.env.product
# deprecated, use clear_caches() instead
def cache_restart(self):
self.clear_caches()
@api.model
def create(self, vals):
# if not vals.get('favicon'):
# vals['favicon'] = self._get_default_favicon()
if not vals.get('name') or vals.get('partner_id'):
self.clear_caches()
return super(Product, self).create(vals)
partner = self.env['res.partner'].create({
'name': vals['name'],
'is_company': False,
# 'image_1920': vals.get('logo'),
# 'email': vals.get('email'),
# 'phone': vals.get('phone'),
# 'website': vals.get('website'),
# 'vat': vals.get('vat'),
# 'country_id': vals.get('country_id'),
})
# compute stored fields, for example address dependent fields
partner.flush()
vals['partner_id'] = partner.id
self.clear_caches()
product = super(Product, self).create(vals)
# The write is made on the user to set it automatically in the multi product group.
# self.env.user.write({'product_ids': [(4, product.id)]})
# Make sure that the selected currency is enabled
# if vals.get('currency_id'):
# currency = self.env['res.currency'].browse(vals['currency_id'])
# if not currency.active:
# currency.write({'active': True})
return product
def write(self, values):
self.clear_caches()
# Make sure that the selected currency is enabled
# if values.get('currency_id'):
# currency = self.env['res.currency'].browse(values['currency_id'])
# if not currency.active:
# currency.write({'active': True})
#
if not self.partner_id:
if not values.get('name'):
values['name'] = self.name
_logger.info("=================")
_logger.info(values)
partner = self.env['res.partner'].create({
'name': values['name'],
'is_company': False,
# 'image_1920': vals.get('logo'),
# 'email': vals.get('email'),
# 'phone': vals.get('phone'),
# 'website': vals.get('website'),
# 'vat': vals.get('vat'),
# 'country_id': vals.get('country_id'),
})
# compute stored fields, for example address dependent fields
partner.flush()
values['partner_id'] = partner.id
res = super(Product, self).write(values)
# invalidate product cache to recompute address based on updated partner
product_address_fields = self._get_product_address_field_names()
product_address_fields_upd = set(product_address_fields) & set(values.keys())
if product_address_fields_upd:
self.invalidate_cache(fnames=product_address_fields)
return res
class ProductCategory(models.Model):
_inherit = "product.category"
type = fields.Selection(
selection=TYPE_LIST, default="hotel", string='Product Type',
help='Pilih type objek pajak', required=True,
company_id=fields.Many2one(
'res.company', string="Lembaga Organisasi",
default=lambda self: self.env.company.id
if not self.company_id else False)
)
rate = fields.Float(string="Tarif")
rate_date = fields.Date(string="Tgl Perubahan")
min_omzet = fields.Float(string="NJOP/Min Omset")
report_type = fields.Selection([('insidentil', 'Insidentil'),
('bulan', 'Bulanan'),
('triwulan', 'Triwulanan'),
('tahun', 'Tahunan'),
], string="Jns Pelaporan")
is_self = fields.Boolean(string="Self Assesment")
end_of_report = fields.Integer(string="Tanggal Akhir Lapor")
end_of_pay = fields.Integer(string="Tanggal Akhir Setor")
end_of_pay_type = fields.Selection([("calendar", "Hari Kalender"),
('work', 'Hari Kerja')],
default="calendar",
string="Jenis Jatuh Tempo")
company_id = fields.Many2one('res.company', string="Lembaga/Organisasi")
category_type = fields.Selection(
string='Category Type',
selection=[('self', 'Self Assessment'), ('official', 'Official Assessment')],
compute='_compute_category_type', inverse='_write_category_type')
@api.depends('is_self')
def _compute_category_type(self):
for categ in self:
categ.category_type = 'self' if categ.is_self else 'official'
def _write_category_type(self):
for categ in self:
categ.is_self = categ.category_type == 'self'
@api.onchange('company_type')
def onchange_company_type(self):
self.is_self = (self.company_type == 'self')
from odoo import models, fields
class Hotel(models.Model):
_inherit = "product.template"
# type = fields.Selection(selection_add=[
# ('hotel', 'Hotel'),
# ('resto', 'Restaurant'),
# ('hibur', 'Hiburan'),
# ('ppj', 'Penerangan Jalan'),
# ('golc', 'Mineral dan Batuan'),
# ('walet', 'Sarang Burung Walet'),
# ], string='Product Type', default='consu', required=True,
# help='A storable product is a product for which you manage stock. The Inventory app has to be installed.\n'
# 'A consumable product is a product for which stock is not managed.\n'
# 'A service is a non-material product you provide.')
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<record model="ir.module.category" id="pdl_kab">
<field name="name">PDL</field>
<field name="description">PDL</field>
<field name="sequence">1</field>
</record>
<data noupdate="0">
<record model="ir.module.category" id="pdl_kab">
<field name="name">PDL</field>
<field name="description">PDL</field>
<field name="sequence">1</field>
</record>
<record model="ir.module.category" id="pdl_kab_admin">
<field name="name">Administrator</field>
<field name="description">Administrator</field>
<field name="sequence">2</field>
<field name="parent_id" ref="pdl_kab"/>
</record>
<record model="ir.module.category" id="pdl_kab_admin">
<field name="name">Administrator</field>
<field name="description">Administrator</field>
<field name="sequence">2</field>
<field name="parent_id" ref="pdl_kab"/>
</record>
<record id="group_pdl_admin" model="res.groups">
<field name="name">Administaror</field>
<field name="category_id" ref="pdl_kab_admin"/>
</record>
<record id="group_pdl_konfigurasi" model="res.groups">
<field name="name">Mengubah konfigurasi</field>
<field name="comment">Mengubah konfigurasi</field>
<field name="category_id" ref="pdl_kab_admin"/>
</record>
<record model="ir.module.category" id="pdl_kab_data">
<field name="name">Pendataan</field>
<field name="description">Pendataan</field>
<field name="sequence">2</field>
<field name="parent_id" ref="pdl_kab"/>
</record>
<record id="group_pdl_pendataan" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="pdl_kab_data"/>
</record>
</data>
<record model="ir.module.category" id="pdl_kab_tetap">
<field name="name">Penetapan</field>
<field name="description">Penetapan</field>
<field name="sequence">2</field>
<field name="parent_id" ref="pdl_kab"/>
</record>
<record id="group_pdl_penetapan" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="pdl_kab_tetap"/>
</record>
<record model="ir.module.category" id="pdl_kab_bayar">
<field name="name">Pembayaran</field>
<field name="description">Pembayaran</field>
<field name="sequence">2</field>
<field name="parent_id" ref="pdl_kab"/>
</record>
<record id="group_pdl_pembayaran" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="pdl_kab_bayar"/>
</record>
<record model="ir.module.category" id="pdl_kab_layanan">
<field name="name">Pelayanan</field>
<field name="description">Pelayanan</field>
<field name="sequence">2</field>
<field name="parent_id" ref="pdl_kab"/>
</record>
<record id="group_pdl_pelayanan" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="pdl_kab_layanan"/>
</record>
</data>
</odoo>
<?xml version="1.0"?>
<odoo>
<data noupdate="1">
<record model="ir.rule" id="res_product_category_rule">
<field name="name">res.product.category company</field>
<field name="model_id" ref="product.model_product_category"/>
<field name="domain_force">['|', ('company_id', 'in', company_ids),
('company_id', '=', False)]
</field>
</record>
</data>
</odoo>
\ No newline at end of file
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_sudut_pandang_admin","access.sudut.pandang.admin","model_pdl_sudut_pandang","base.group_system",1,1,1,1
"access_sudut_pandang_admin_pdl","access.sudut.pandang.admin.pdl","model_pdl_sudut_pandang","group_pdl_konfigurasi",1,1,1,1
"access_district_admin","access.district.admin","model_res_district","base.group_system",1,1,1,1
"access_district_admin_pdl","access.district.admin.pdl","model_res_district","group_pdl_konfigurasi",1,1,1,1
"access_district_sub_admin","access.district.sub.admin","model_res_district_sub","base.group_system",1,1,1,1
"access_district_sub_admin_pdl","access.district.sub.admin.pdl","model_res_district_sub","group_pdl_konfigurasi",1,1,1,1
"access_village_admin","access.village.admin","model_res_district_village","base.group_system",1,1,1,1
"access_village_admin_pdl","access.village.admin.pdl","model_res_district_village","group_pdl_konfigurasi",1,1,1,1
"access_sudut_pandang_admin_pdl","access.sudut.pandang.admin.pdl","model_pdl_sudut_pandang","group_pdl_admin",1,1,1,1
"access_district_admin_pdl","access.district.admin.pdl","model_res_district","group_pdl_admin",1,1,1,1
"access_district_sub_admin_pdl","access.district.sub.admin.pdl","model_res_district_sub","group_pdl_admin",1,1,1,1
"access_village_admin_pdl","access.village.admin.pdl","model_res_district_village","group_pdl_admin",1,1,1,1
.openerp div.oe_account_help {
background: #D6EBFF;
width: 100%;
padding: 10px;
border: 3px solid #C1D4E6;
}
.openerp p.oe_account_font_help {
text-align: left;
font-weight: bold;
margin: 0px;
font-size: 14px;
}
.openerp p.oe_account_font_content {
margin-left: 30px;
font-size: 14px;
}
.openerp p.oe_account_font_title {
margin-top: 7px;
font-size: 15px;
font-style: italic;
color: grey;
}
.oe_invoice_outstanding_credits_debits {
clear: both;
float: right;
min-width: 350px;
}
@media (max-width: 767.98px) {
.oe_invoice_outstanding_credits_debits {
min-width: initial;
width: 100%;
}
}
.openerp .oe_force_bold {
font-weight: bold !important;
}
.openerp label.oe_open_balance {
margin-right: -18px;
}
.openerp label.oe_subtotal_footer_separator {
float: right;
width: 184px !important;
}
.openerp label.oe_mini_subtotal_footer_separator {
margin-right: -14px;
}
.openerp .oe_account_total, .openerp .oe_pos_total {
margin-left: -2px;
}
.openerp label.oe_real_closing_balance {
min-width: 184px !important;
}
.openerp label.oe_difference, .openerp label.oe_pos_difference {
margin-right: -10px;
padding-left: 10px !important;
min-width: 195px !important;
}
.openerp .oe_opening_total {
margin-right: 4px;
}
.o_payment_label {
padding-right: 20px;
}
\ No newline at end of file
.oe_tax_group_editable {
width: 100%;
}
.tax_group_edit {
white-space: nowrap;
}
.tax_group_edit:hover {
color: #00A09D;
cursor: pointer;
}
.oe_tax_group_name {
font-weight: bold;
min-width: 150px;
text-align: right;
padding-right: 20px;
}
.oe_tax_group_editable .oe_tax_group_amount_value input {
width: 65%;
float: right;
text-align: right;
}
......@@ -39,11 +39,11 @@
name="Konfigurasi"
parent="pdl_kab_menu_root"
sequence="7"/>
<!-- <menuitem id="category_config_pdl_kab_menu"-->
<!-- name="Kategori Objek"-->
<!-- parent="config_pdl_kab_menu"-->
<!-- action="action_object_category_config_pdl_kab"-->
<!-- sequence="2"/>-->
<menuitem id="category_config_pdl_kab_menu"
name="Kategori Objek"
parent="config_pdl_kab_menu"
action="action_category_pdl_kab"
sequence="2"/>
<!-- <menuitem id="tax_config_pdl_kab_menu"-->
<!-- name="Tarif Pajak"-->
<!-- parent="config_pdl_kab_menu"-->
......@@ -88,11 +88,9 @@
parent="config_pdl_kab_menu"
action="action_partner_config_pdl_kab"
sequence="4"/>
<!-- <menuitem id="op_config_pdl_kab_menu"-->
<!-- name="Objek Pajak"-->
<!-- parent="config_pdl_kab_menu"-->
<!-- action="action_op_pdl_kab"-->
<!-- sequence="4"/>-->
<menuitem id="op_config_pdl_kab_menu"
name="Objek Pajak"
parent="config_pdl_kab_menu"
action="action_op_pdl_kab"
sequence="4"/>
</odoo>
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="op_template_tree" model="ir.ui.view">
<field name="name">op.template.tree</field>
<field name="model">product.template</field>
<field name="arch" type="xml">
<tree string="Objek Pajak" sample="1">
<field name="default_code" string="NOPD"/>
<field name="name" string="Nama Objek"/>
<field name="lst_price" string="Min Omset"/>
<field name="taxes_id" widget="many2many_tags" string="Pajak"/>
<field name="company_id" string="Lembaga/Organisasi"/>
<field name="activity_exception_decoration" widget="activity_exception"/>
</tree>
</field>
</record>
<!-- <record id="op_template_form" model="ir.ui.view">-->
<!-- <field name="name">op.template.form.inherit</field>-->
<!-- <field name="model">product.template</field>-->
<!-- <field name="priority">4</field>-->
<!-- <field name="inherit_id" ref="account.product_template_form_view"/>-->
<!-- </record>-->
<record id="action_op_pdl_kab" model="ir.actions.act_window">
<field name="name">Objek Pajak Hotel</field>
<field name="res_model">product.template</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{'search_default_filter_to_sell': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Pendataan Objek Pajak
</p>
</field>
</record>
<record id="action_pendataan_hotel_pdl_kab" model="ir.actions.act_window">
<field name="name">Objek Pajak Hotel</field>
<field name="res_model">product.template</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{'search_default_filter_to_sell': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Pendataan Objek Pajak
</p>
</field>
</record>
</data>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="op_template_tree" model="ir.ui.view">
<field name="name">op.template.tree</field>
<field name="model">product.template</field>
<field name="arch" type="xml">
<tree string="Objek Pajak" sample="1">
<field name="default_code" string="NOPD"/>
<field name="name" string="Nama Objek"/>
<field name="lst_price" string="Min Omset"/>
<field name="type" string="Jenis"/>
<field name="company_id" string="Lembaga/Organisasi"/>
</tree>
</field>
</record>
<record id="op_template_form" model="ir.ui.view">
<field name="name">op.template.form</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<!-- <field name="inherit_id">product.product_template_only_form_view</field>-->
<field name="arch" type="xml">
<xpath expr="//div[@name='options']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//notebook" position="before">
<div class="oe_title">
<label for="default_code" class="oe_edit_only" string="NPWPD"/>
<h1>
<field name="default_code"/>
</h1>
</div>
<group>
</group>
<group>
<group>
<field name="partner_id" readonly="1" string="Contact"/>
<label for="street" string="Address"/>
<div class="o_address_format">
<field name="street" placeholder="Street..." class="o_address_street"/>
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
<field name="village_id" class="o_address_city" placeholder="Desa/Keurahan"
options='{"no_open": True}'/>
<field name="sub_district_id" class="o_address_city" placeholder="Kecamatan"
options='{"no_open": True}'/>
<field name="district_id" class="o_address_city" placeholder="Kab/Kota"
options='{"no_open": True}'/>
<field name="state_id" class="o_address_city" placeholder="State"
options='{"no_open": True}'/>
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="country_id" placeholder="Country" class="o_address_country"
options='{"no_open": True}'/>
</div>
</group>
<group>
<field name="phone" class="o_force_ltr"/>
<field name="email"/>
<field name="website" string="Website" widget="url"
placeholder="e.g. https://opensipkd.com"/>
</group>
</group>
</xpath>
<!-- <xpath expr="//page[@name='general_information']" position="after">-->
<!-- <page name="address" string="Address">-->
<!---->
<!-- </page>-->
<!-- </xpath>-->
<page>
</page>
</field>
</record>
<record id="action_op_pdl_kab" model="ir.actions.act_window">
<field name="name">Objek Pajak</field>
<field name="res_model">product.template</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{"default_purchase_ok": False}</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('op_template_tree')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('op_template_form')}),
(0, 0, {'view_mode': 'kanban'})]"/>
<field name="context">{'search_default_filter_to_sell': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Pendataan Objek Pajak
</p>
</field>
</record>
<record id="category_tree" model="ir.ui.view">
<field name="name">category.tree</field>
<field name="model">product.category</field>
<field name="arch" type="xml">
<tree string="Kategory Pajak" sample="1">
<field name="display_name" string="Nama"/>
<field name="rate" string="Tarif"/>
<field name="min_omzet"/>
<field name="category_type"/>
<field name="report_type"/>
</tree>
</field>
</record>
<record id="category_form" model="ir.ui.view">
<field name="name">category.form</field>
<field name="model">product.category</field>
<field name="arch" type="xml">
<form string="Kategori Pajak">
<sheet>
<div class="oe_title">
<label class="oe_edit_only" for="name" string="Kategori"/>
<h1>
<field name="name" placeholder="Product Name"/>
</h1>
<label class="oe_edit_only" for="category_type" string="Self/Official"/>
<field name="category_type" widget="radio"
options="{'horizontal': true}"/>
</div>
<notebook>
<page string="Informasi">
<group>
<group>
<field name="rate"/>
<field name="rate_date"/>
<field name="type"/>
<field name="min_omzet"/>
<field name="report_type"/>
</group>
<group>
<field name="end_of_report"/>
<field name="end_of_pay"/>
<field name="end_of_pay_type"/>
<field name="company_id"
groups="base.group_multi_company"
options="{'no_create': True}"
force_save="1"/>
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="category_search" model="ir.ui.view">
<field name="name">category.search</field>
<field name="model">product.category</field>
<field name="arch" type="xml">
<search string="Nama">
<field name="name"/>
<group string="Group By">
<filter name="groupby_type" string="Type" context="{'group_by': 'type'}"/>
</group>
</search>
</field>
</record>
<record id="action_category_pdl_kab" model="ir.actions.act_window">
<field name="name">Kategori Objek Pajak</field>
<field name="res_model">product.category</field>
<field name="view_mode">tree,kanban,form</field>
<field name="view_id" ref="category_tree"/>
<field name="search_view_id" ref="category_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Kategori Objek Pajak
</p>
</field>
</record>
</data>
</odoo>
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!