From 8be264bb6068b7f622db30e4063921b32e4b99c5 Mon Sep 17 00:00:00 2001 From: "admin.suherdy" Date: Sat, 6 Dec 2025 19:19:11 +0700 Subject: [PATCH] feat: introduce landed cost tags and integrate them with purchase order and line models and views. --- __manifest__.py | 46 ++--- __pycache__/__init__.cpython-310.pyc | Bin 0 -> 222 bytes __pycache__/__init__.cpython-312.pyc | Bin 0 -> 200 bytes data/landed_cost_tags_data.xml | 72 ++++---- models/__init__.py | 4 +- models/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 317 bytes models/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 297 bytes .../landed_cost_tag.cpython-310.pyc | Bin 0 -> 715 bytes .../landed_cost_tag.cpython-312.pyc | Bin 0 -> 907 bytes .../purchase_order.cpython-310.pyc | Bin 0 -> 1048 bytes .../purchase_order.cpython-312.pyc | Bin 0 -> 1338 bytes .../purchase_order_line.cpython-310.pyc | Bin 0 -> 1759 bytes .../purchase_order_line.cpython-312.pyc | Bin 0 -> 2482 bytes models/landed_cost_tag.py | 22 +-- models/purchase_order.py | 40 ++--- models/purchase_order_line.py | 110 ++++++------ security/ir.model.access.csv | 4 +- views/purchase_order_alternative_views.xml | 68 ++++---- views/purchase_order_views.xml | 164 +++++++++--------- 19 files changed, 265 insertions(+), 265 deletions(-) create mode 100644 __pycache__/__init__.cpython-310.pyc create mode 100644 __pycache__/__init__.cpython-312.pyc create mode 100644 models/__pycache__/__init__.cpython-310.pyc create mode 100644 models/__pycache__/__init__.cpython-312.pyc create mode 100644 models/__pycache__/landed_cost_tag.cpython-310.pyc create mode 100644 models/__pycache__/landed_cost_tag.cpython-312.pyc create mode 100644 models/__pycache__/purchase_order.cpython-310.pyc create mode 100644 models/__pycache__/purchase_order.cpython-312.pyc create mode 100644 models/__pycache__/purchase_order_line.cpython-310.pyc create mode 100644 models/__pycache__/purchase_order_line.cpython-312.pyc diff --git a/__manifest__.py b/__manifest__.py index e8956b2..f83c649 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -1,24 +1,24 @@ -{ - 'name': 'Purchase RFQ Comparison', - 'version': '18.0.1.0.0', - 'category': 'Purchase', - 'summary': 'Add comparison page in RFQ forms with additional fields', - 'description': ''' - This module extends the Purchase RFQ functionality by adding: - - New "To Compare" page in RFQ forms - - Additional fields: Notes, Garansi (warranty), Landed Cost options - - Landed Cost tags with predefined options - - Enhanced Compare Alternative RFQ view with new fields and Payment Terms - ''', - 'author': 'Suherdy Yacob', - 'depends': ['purchase', 'purchase_requisition'], - 'data': [ - 'security/ir.model.access.csv', - 'data/landed_cost_tags_data.xml', - 'views/purchase_order_views.xml', - 'views/purchase_order_alternative_views.xml', - ], - 'installable': True, - 'application': False, - 'license': 'LGPL-3', +{ + 'name': 'Purchase RFQ Comparison', + 'version': '18.0.1.0.0', + 'category': 'Purchase', + 'summary': 'Add comparison page in RFQ forms with additional fields', + 'description': ''' + This module extends the Purchase RFQ functionality by adding: + - New "To Compare" page in RFQ forms + - Additional fields: Notes, Garansi (warranty), Landed Cost options + - Landed Cost tags with predefined options + - Enhanced Compare Alternative RFQ view with new fields and Payment Terms + ''', + 'author': 'Suherdy Yacob', + 'depends': ['purchase', 'purchase_requisition'], + 'data': [ + 'security/ir.model.access.csv', + 'data/landed_cost_tags_data.xml', + 'views/purchase_order_views.xml', + 'views/purchase_order_alternative_views.xml', + ], + 'installable': True, + 'application': False, + 'license': 'LGPL-3', } \ No newline at end of file diff --git a/__pycache__/__init__.cpython-310.pyc b/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05873938de59dd64b2d8cf81bc8c77a3ad490f15 GIT binary patch literal 222 zcmYk0u?oU45QdW~B0`~q&meSZaB~pp6NupE64G2Gg(g>%cIYGdN?irP&DqJTlRw=5 z^B>&tVVbTOY4d#BHRWR}|4OKoG%+Is2E1X8UpQxwoLN45aa!kmTsQ>N#ABX}EKE0d z7UmQ``&7cBGa~lZ1Q?1zX{<`8TICCkMGfLKbQZm)9|8e!yA!&P9XbVoK8m&v+Nx+| ixZb2j*Q!uQ^g_zo*PWC_JB-UcA@q$oOhj=)$k-Q4Cpy^x literal 0 HcmV?d00001 diff --git a/__pycache__/__init__.cpython-312.pyc b/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5849f7989348c5699498ec2eaf78c8312d3406d2 GIT binary patch literal 200 zcmX@j%ge<81ZvMdWQYLi#~=<2FhLog1%Qm{3@HpLj5!Rsj8Tk?43$ip%r6;%!kUb? z*mCnzQge#^G?{KO6fpzERx*4B>HOuIVii+RS(1^Tmkd-9lb@2GZ)g#dTv}X`pPQJH zlAl)`Q&3uzoRL_Z8ef!F7@wS - - - - - - Biaya Ongkir - ONGKIR - 1 - - - - Biaya Pasang - PASANG - 2 - - - - Biaya Bongkar - BONGKAR - 3 - - - - Biaya Muat - MUAT - 4 - - - - Biaya Dokumen - DOKUMEN - 5 - - - + + + + + + + Biaya Ongkir + ONGKIR + 1 + + + + Biaya Pasang + PASANG + 2 + + + + Biaya Bongkar + BONGKAR + 3 + + + + Biaya Muat + MUAT + 4 + + + + Biaya Dokumen + DOKUMEN + 5 + + + \ No newline at end of file diff --git a/models/__init__.py b/models/__init__.py index 850b7f7..8f047b3 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,3 +1,3 @@ -from . import purchase_order -from . import purchase_order_line +from . import purchase_order +from . import purchase_order_line from . import landed_cost_tag \ No newline at end of file diff --git a/models/__pycache__/__init__.cpython-310.pyc b/models/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17cda4bdd8cf372b0b750abc877fa11d1f1a5370 GIT binary patch literal 317 zcmY+9F-`>`5QbrQHO9QBCSJmAme^Ss^G;w)?6#2b7!(p0LBrpL!L+fYg|aEb8gD?^c#-dTOh5ByTJoR<82p zgvDS)o~=o+42#mZ-vu?PIA|Okh`Xg&j2giR1jNfLq32vMC;*IE{C*=nK2vI#RB{=k g2=u^bA*GA1NI6W)dUQ?Z?9EMGD%bQ4+we2~4G%(As{jB1 literal 0 HcmV?d00001 diff --git a/models/__pycache__/__init__.cpython-312.pyc b/models/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59eecec4412510718927b547b25fad3a6b3353a4 GIT binary patch literal 297 zcmY+AF-iq75Qb+q``{tGXJM;_o!ba@BH{_e11!N1Hql+kX4WKI>;=4nC$R7=-eBR` zSlKDBvvMLTIK`hYADKzW^J=vNT=$P3?KQ8jdGlMv4{VPZ9>9P>2R+t^nG5EkF1}eX zi&`K|Wwm%iK3?Ix9>&nLI$A}+*uZA*zfrF9mi4aF-dLj=ib*AXdsUS)1i@26nPb86 z1Y1t{yfkNWm{Lo=A!8*OqLWkEj4@HKjUgZ9-zDMZj%W6R4qYTKdv0)1D%JTeDRn$d f^YWbK=C=eXC1ww)q5?7_MjK{mlDT%Xog0!@pM0G!e zzvLDPiH@3zadN~o)6S*YwY}6`{jj_?LmJJx;%6IKw^DR~-DJhWB16umv zVJp83Wpouo03k#-UYSf;e48yWTS5Yh8(N-Vyn-bnC&)`-g(6a$zU3WA*eEkx^8M$B z{isF7jm(>=o(lx>0g-z%@ys#LkZOaDx6%e%^q1}$X3%xFw~3aAvDOl7u)&MjaHATf zGpb{hZ=+XYs6WZfo6{KNj*rc-&DJ(y%yneUE*Zm_jE##|j2%Ya+#=yb!6HZ_blnfN z>grCM2- zv632&`H>6t@x0|d?{F4*4aNK8P^r!}E)*#B^jRTBGpLpWsLm9B2gvm9z=Udhu4|*Z zVt(af9xDQ7U^v#iKWg{DZktnd2??lMYi~_g^gf-?Z5Gwiif_+?wTChn1wrt(P`!9^CTZOjbq+7zd+&QQA79=_P0Im(?tDFNzk~pM z5y|Q(OR(7CU;+?8&;vd+pf4E`1QK`%kaPf03d4PMHFWZwrV?z(eOXt&iA0x}>Jx;$ zkf}`GXLeJ z|KMd~-uZvrmpRH#xgp{h`IxnlWTzv_@!RshU)A~rU1M6!4iH8a5=ITX^?ak#qfXln zamkD8C5Jak5$~Kyh(*CHaw?Mp+s90<^Vkqpg%Ndw7RylF?YR^qCRez5OsNo$P#w}N z*TU4hPUJqrx|F18gqwEHi|YCs%UG7U(Xv?1vbgU(PvC-Ob$hnA>?kpX7ZDB}>UJWR z1T1S&?8FT!{t17#ZBv?#p(7-ucY_GGFlCA(w6OF&LOg5-OtoV*@4!O%^z$*=Haq>O zO#(4y5=6+2Ez{|R5%Fz=ND!JUdo0@QS`P6$Hg!W1n8}`)iD|qMMiw`%)ag^PYjF_T z!lyhOfO+BS;KBUdl|gNOc73q>Iln%aida14}Ocv^?Sn9+S<&oIrM9rqC#_UTRvCQqn?HyX= gsaT^>Y|n8DLih<>{;pHYo6t|OHF8A3Ypz0W@(=j9h76ybWI&`5&rB)1CEH}@+q)Ot{&I#_+tzG*+ zz{tPkfdvVv8#5Au=Uhv#5{~@zKK*|0BXTtA6Fk!&KeKNRA>XaAemoR*@#<$tfB-E> zNfTN+iBr0XOUXU~2iz+HuApb$rJHoXJ0g?L4f>ObYy47zD75iUb5VdcF0b>{+SX48 zgcjrSs+B9j`z@ zxF>b9-2N9Lg&WP>-ozV-zC^$zr2rScGzT7JWR}T{*nDApJ zst4L!hmdQF3MTH2oq@7hS~5jgb~DW5H9!ojWI5O#d0G^wUx^x{&o3EgvJ|nNXF|au zTJTh!?3TRd6*eczAwFC*nXFRWgjj-<&tJvqTsN}h0J75YT}PQZJ;%z+nyXyPDqgM5 zy}6xJR4>d^hOcG3nhCZB?-63rJ`&#@Qt!`l=fS+A|He!w8zx|^;-z5B^clmP^TP5& z#?I%wxU~cb*a;VuKGapqZe)Z?^3=CrP^ds&~Pvgd{!CG5z(y&qTfd7P?rUMC0W_yaQr$}*y3Lxaa-N-YXprE zXfI7Xt92silpw{<3(Hq zZO3n|HiV!>kxu2Hd1lxiofYPvKu^n%q)yXAA&ar55WCPTE_7~+Zq6?4{nXvr-+6lR z@XYE9eXdtH|9I1Dp^ z6&HK?)lX^tobf_G)6ao1+qw5^%UUwM^#I$9cf@J##+Kik|~!AuFF@Yaw+2( zBu%7l%Rf#+_)8fYHNi92l39LB7ezqs2|Fi5UsDw29W1|ubWo_^K?#BMczaZ2& F`F}V8QRn~w literal 0 HcmV?d00001 diff --git a/models/__pycache__/purchase_order_line.cpython-310.pyc b/models/__pycache__/purchase_order_line.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..870c4e5582a7f928e9880b53c8c9cd574c3771a4 GIT binary patch literal 1759 zcmah~PmAP46t7CElT81a>DlQWXT(E12-6~I+>?UHvLo(gb{ud(2uLWqs=G5Jsh+Ad z*kJ`>_v&}hg9pEYAEmCIJPMv83VC8z1?*VWWV}@df;n?Nmrf247g!P#B1BpG*_{;|$0C(d6 z_#WE>-nYDO`2hIP@&WK68?k-R9M~B~eE-J-HfD$H0Xt$7_V6c<9kaJyq8B(GvlEE@ zR3Bb#6uSQoj3$KAG9VT;; zuQw%6tfysErb-k^U6bm)*1@=|a3Mt=mMb2%ONQ3b6jPNlEtcAEX4GWGv$gJBiju49 z>>SpqXATRa*)@~)pHfK+l~x~oMJ1qe8>YoV$efm`D0aD3g9}i~A)JBLp#Ks-mEp|7Lw@N;~FTtLL49w5&mA5dV?9-#g$bUysnl346n8CYrT4s@woeQfp{`YOE7GORo5ek&x; zXbD@^Zb98jpI=S~atN{NgQj!a+UbXN;;*a6_iH4!lKQwF_#eIB6jqPw0WBSL%Bv4+ zTUT||A#I^`vy*QyO&v`X&lZ}PllTjgr;yHH0EsCIHzk`K+{Dj zn_X?ol_=(LC(Q&C;=_+-^NlJ+P8k!0nzdz0S7L${q+aR6PL^AcBeO;QIAm5x+ry6K^+iu=lF(d)WDB-?8&uPCZS`#z=Fl kY%X;;y=Ufc#E$92VfI{_V07?FU6@bJ(Nrd^2|9NF1=&Osx&QzG literal 0 HcmV?d00001 diff --git a/models/__pycache__/purchase_order_line.cpython-312.pyc b/models/__pycache__/purchase_order_line.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ccc7786007154cf5f74d34adadcf29d3a0b3cb41 GIT binary patch literal 2482 zcmai0-EZ4e6u(X!C;iCR+H}omDsOAqTvlr>gR%~I=%x)#T{n%2Nogy~%5~dRv7KGJ z60usTNRyZl66LAwQ{e%jsz?=22>27=p^-qf`~nhBymiWW;fZtol~594DbD%${mwo2 z+;eX7Q!?3&;IY1XvHC*-p+Be+JTYHr%z&_iFv3g)sZ5bkBgKdsEk+p>LH7`jJVQ9D zFl)d+`y56+OEFesh1j1|5uy&K>R7254!2xZD%fzMafbo3;W!`@fDE!rxX5#DkX?Z6Zb5c;MD_r( zw*}ebA_v>VOyU$^(=C}M0h?MIZiCI>EIx<(a6ir+a-JU#JVS>*w3w-#7Y3c|qjgeR zl?~+~!3vozYl_uZ^-ZEqZDNHQ`{hzeU)M~rD%Vs6zD}`HtUV+qGgMp`W>ItuiWo!)wQc!(~mQMmtKJ?H! z`L%W{Vr4?tieG~M(BfqW=L5SNYG;)oGl*}LV2Z+r_B{PGw%pm;KzGp6_Xuq=8_Ze= zY6|3ed;40Xi3y|)MhdMRSbh%&4EhZ$e`2ZJE{AsW4y-U%2UeTO2Uc*mbXu#;EdZ?W z#`$yyL#3MgbhR*lR}1rUwQxOGYsUGJMYV_!wQkZWfNA5KXU}_c)@)FsRAdtxIcQ98 z!0yfoJ%n!3N&E90bd;0x+TpA@(_BMx`^y>dfd8?_{dRMb9w1PATAI$udcIauUyBm7 zpX2v;8-xl7i=}nL)KwW{T{9Mg zN=Rh+Y0C|@=>4)Z-F}7;T&&gzJqv5{(b>yV{J$ITD)5XQcx|CZ0_F10@7U?S&o)2V zw8tlomJXIq#_!k1?{BleWX5c9@<=^UPsG`}I7=W(VEsP%( z4hkp2OkJ3vmRIeGH@+);TR53`T%UNn&HkDZe;=Rp00mf+%Wl2@@xn(7+ZT=tQ^z;w?d;{_(ObvwEHt7Fx5T_)Q?aQ=EEK(s z(ml=zoWs&KCG=)>>*|#z_JID=@#=7ey29ExiMPG;d6$fVgWk}_EATpvG7R$@8mXg^ Tm)s3z3bxa`*ZUU&(Ix)_d@hYN literal 0 HcmV?d00001 diff --git a/models/landed_cost_tag.py b/models/landed_cost_tag.py index 527950b..31f551b 100644 --- a/models/landed_cost_tag.py +++ b/models/landed_cost_tag.py @@ -1,12 +1,12 @@ -from odoo import models, fields - - -class LandedCostTag(models.Model): - _name = 'purchase.landed.cost.tag' - _description = 'Landed Cost Tag' - _rec_name = 'name' - - name = fields.Char(string='Name', required=True) - code = fields.Char(string='Code', required=True) - color = fields.Integer(string='Color') +from odoo import models, fields + + +class LandedCostTag(models.Model): + _name = 'purchase.landed.cost.tag' + _description = 'Landed Cost Tag' + _rec_name = 'name' + + name = fields.Char(string='Name', required=True) + code = fields.Char(string='Code', required=True) + color = fields.Integer(string='Color') active = fields.Boolean(string='Active', default=True) \ No newline at end of file diff --git a/models/purchase_order.py b/models/purchase_order.py index 9f20445..a140970 100644 --- a/models/purchase_order.py +++ b/models/purchase_order.py @@ -1,21 +1,21 @@ -from odoo import models, fields, api - - -class PurchaseOrder(models.Model): - _inherit = 'purchase.order' - - # Fields for "To Compare" page - comparison_notes = fields.Text(string='Notes') - garansi = fields.Boolean(string='Garansi') - landed_cost = fields.Boolean(string='Landed Cost') - landed_cost_tag_ids = fields.Many2many( - 'purchase.landed.cost.tag', - string='Landed Cost Tags', - help='Select applicable landed cost types' - ) - - @api.onchange('landed_cost') - def _onchange_landed_cost(self): - """Clear landed cost tags when landed cost is disabled""" - if not self.landed_cost: +from odoo import models, fields, api + + +class PurchaseOrder(models.Model): + _inherit = 'purchase.order' + + # Fields for "To Compare" page + comparison_notes = fields.Text(string='Notes') + garansi = fields.Boolean(string='Garansi') + landed_cost = fields.Boolean(string='Landed Cost') + landed_cost_tag_ids = fields.Many2many( + 'purchase.landed.cost.tag', + string='Landed Cost Tags', + help='Select applicable landed cost types' + ) + + @api.onchange('landed_cost') + def _onchange_landed_cost(self): + """Clear landed cost tags when landed cost is disabled""" + if not self.landed_cost: self.landed_cost_tag_ids = [(5, 0, 0)] # Remove all tags \ No newline at end of file diff --git a/models/purchase_order_line.py b/models/purchase_order_line.py index 80c1aa6..47b28e8 100644 --- a/models/purchase_order_line.py +++ b/models/purchase_order_line.py @@ -1,56 +1,56 @@ -from odoo import models, fields, api - - -class PurchaseOrderLine(models.Model): - _inherit = 'purchase.order.line' - - # Computed fields for comparison data from purchase.order - order_payment_term_id = fields.Many2one( - 'account.payment.term', - string='Payment Terms', - compute='_compute_order_comparison_fields', - help='Payment terms from the purchase order' - ) - - order_comparison_notes = fields.Text( - string='Notes', - compute='_compute_order_comparison_fields', - help='Comparison notes from the purchase order' - ) - - order_garansi = fields.Boolean( - string='Garansi', - compute='_compute_order_comparison_fields', - help='Warranty information from the purchase order' - ) - - order_landed_cost = fields.Boolean( - string='Landed Cost', - compute='_compute_order_comparison_fields', - help='Landed cost flag from the purchase order' - ) - - order_landed_cost_tag_ids = fields.Many2many( - 'purchase.landed.cost.tag', - string='LC Tags', - compute='_compute_order_comparison_fields', - help='Landed cost tags from the purchase order' - ) - - @api.depends('order_id', 'order_id.payment_term_id', 'order_id.comparison_notes', - 'order_id.garansi', 'order_id.landed_cost', 'order_id.landed_cost_tag_ids') - def _compute_order_comparison_fields(self): - """Compute comparison fields from the related purchase order""" - for line in self: - if line.order_id: - line.order_payment_term_id = line.order_id.payment_term_id - line.order_comparison_notes = line.order_id.comparison_notes - line.order_garansi = line.order_id.garansi - line.order_landed_cost = line.order_id.landed_cost - line.order_landed_cost_tag_ids = line.order_id.landed_cost_tag_ids - else: - line.order_payment_term_id = False - line.order_comparison_notes = False - line.order_garansi = False - line.order_landed_cost = False +from odoo import models, fields, api + + +class PurchaseOrderLine(models.Model): + _inherit = 'purchase.order.line' + + # Computed fields for comparison data from purchase.order + order_payment_term_id = fields.Many2one( + 'account.payment.term', + string='Payment Terms', + compute='_compute_order_comparison_fields', + help='Payment terms from the purchase order' + ) + + order_comparison_notes = fields.Text( + string='Notes', + compute='_compute_order_comparison_fields', + help='Comparison notes from the purchase order' + ) + + order_garansi = fields.Boolean( + string='Garansi', + compute='_compute_order_comparison_fields', + help='Warranty information from the purchase order' + ) + + order_landed_cost = fields.Boolean( + string='Landed Cost', + compute='_compute_order_comparison_fields', + help='Landed cost flag from the purchase order' + ) + + order_landed_cost_tag_ids = fields.Many2many( + 'purchase.landed.cost.tag', + string='LC Tags', + compute='_compute_order_comparison_fields', + help='Landed cost tags from the purchase order' + ) + + @api.depends('order_id', 'order_id.payment_term_id', 'order_id.comparison_notes', + 'order_id.garansi', 'order_id.landed_cost', 'order_id.landed_cost_tag_ids') + def _compute_order_comparison_fields(self): + """Compute comparison fields from the related purchase order""" + for line in self: + if line.order_id: + line.order_payment_term_id = line.order_id.payment_term_id + line.order_comparison_notes = line.order_id.comparison_notes + line.order_garansi = line.order_id.garansi + line.order_landed_cost = line.order_id.landed_cost + line.order_landed_cost_tag_ids = line.order_id.landed_cost_tag_ids + else: + line.order_payment_term_id = False + line.order_comparison_notes = False + line.order_garansi = False + line.order_landed_cost = False line.order_landed_cost_tag_ids = False \ No newline at end of file diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 873aa25..377e056 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,3 +1,3 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_purchase_landed_cost_tag_user,purchase.landed.cost.tag.user,model_purchase_landed_cost_tag,purchase.group_purchase_user,1,1,1,0 +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_purchase_landed_cost_tag_user,purchase.landed.cost.tag.user,model_purchase_landed_cost_tag,purchase.group_purchase_user,1,1,1,0 access_purchase_landed_cost_tag_manager,purchase.landed.cost.tag.manager,model_purchase_landed_cost_tag,purchase.group_purchase_manager,1,1,1,1 \ No newline at end of file diff --git a/views/purchase_order_alternative_views.xml b/views/purchase_order_alternative_views.xml index 2abd431..58a6ced 100644 --- a/views/purchase_order_alternative_views.xml +++ b/views/purchase_order_alternative_views.xml @@ -1,35 +1,35 @@ - - - - - purchase.order.alternative.list.inherit.comparison - purchase.order - - - - - - - - - - - - - - - purchase.order.line.compare.list.inherit.comparison - purchase.order.line - - - - - - - - - - - - + + + + + purchase.order.alternative.list.inherit.comparison + purchase.order + + + + + + + + + + + + + + + purchase.order.line.compare.list.inherit.comparison + purchase.order.line + + + + + + + + + + + + \ No newline at end of file diff --git a/views/purchase_order_views.xml b/views/purchase_order_views.xml index 4c963d4..7f31599 100644 --- a/views/purchase_order_views.xml +++ b/views/purchase_order_views.xml @@ -1,83 +1,83 @@ - - - - - purchase.order.form.inherit.comparison - purchase.order - - - - - - - - - - - - - - - - - - - - purchase.landed.cost.tag.list - purchase.landed.cost.tag - - - - - - - - - - - - purchase.landed.cost.tag.form - purchase.landed.cost.tag - -
- - - - - - - - -
-
-
- - - - Landed Cost Tags - purchase.landed.cost.tag - list,form - -

- Create your first landed cost tag! -

-

- Landed cost tags help categorize different types of additional costs - like shipping, installation, loading, unloading, or documentation fees. -

-
-
- - - - + + + + + purchase.order.form.inherit.comparison + purchase.order + + + + + + + + + + + + + + + + + + + + purchase.landed.cost.tag.list + purchase.landed.cost.tag + + + + + + + + + + + + purchase.landed.cost.tag.form + purchase.landed.cost.tag + +
+ + + + + + + + +
+
+
+ + + + Landed Cost Tags + purchase.landed.cost.tag + list,form + +

+ Create your first landed cost tag! +

+

+ Landed cost tags help categorize different types of additional costs + like shipping, installation, loading, unloading, or documentation fees. +

+
+
+ + + +
\ No newline at end of file