ISO 8583 message numeric in byte - iso8583

Config:
<template type="0200">
<field num="3" type="NUMERIC" length="6">000000</field>
<field num="11" type="NUMERIC" length="6" />
<field num="24" type="NUMERIC" length="3" />
</template>
Code:
mfact.setTraceNumberGenerator(new SimpleTraceGenerator((int) (System
.currentTimeMillis() % 100000)));
m = mfact.newMessage(0x200);
m.setBinary(false);
m.setValue(24, 109, IsoType.NUMERIC, 3);
String strMsg = new String(msg.writeData());
I get the following result for strMsg
05002020010000000000920000058121109
Please look at the last 3 number.
The result should be:
050020200100000000009200000581210109
Why is the field 24 is 109, I thought it should be 0109?

Related

ODOO - How to update two levels o2m fileds relation

Odoo community version 11.0-20190311
I have a parent class (dt_tst001) with a o2m field (itens) related to a class (dt_tst002), with another o2m field (tributos) related to a third class (dt_tst003).
In the parent class there is another field (seguro_total) and when its value is changed I need to start a recalculation (_upd_seguro) of field (seguro) in the second class and fields (base_calculo, valor_tributo) in the third class.
The recalculation in the second class is working, but not in the third one.
Debuging step by step the values are updated but when checking the form, it shows the original values, and this values are sent to the database.
Sample code:
class DT_TST001(models.Model):
_name = "dt_tst001"
_rec_name = "documento"
documento = fields.Char(string = "Documento", size = 9, required = True)
seguro_total = fields.Float(string = "Seguro total")
itens = fields.One2many("dt_tst002", inverse_name = "documento_id", required = True)
#api.onchange('seguro_total')
def _upd_seguro(self):
for item in self.itens:
item.update({
'seguro' : ((item.quantidade * item.valor_unitario) / item.valor_total) * self.seguro_total})
for tributo in item.tributos:
tributo.update({'base_calculo' : (item.valor_total + item.seguro)})
tributo.update({'valor_tributo' : (item.valor_total + item.seguro) * tributo.aliquota / 100})
class DT_TST002(models.Model):
_name = "dt_tst002"
_rec_name = "documento_id"
documento_id = fields.Many2one("dt_tst001", string = "Documento", required = True, ondelete='cascade')
produto_id = fields.Char(string = "Produto", size = 15, required = True)
quantidade = fields.Float(string="Quantidade", default = 0.00)
valor_unitario = fields.Float(string="Valor unitário", required = True, default = 0.00)
valor_total = fields.Float(string="Valor total", required = True, default = 0.00)
seguro = fields.Float(string="Seguro", compute='_recalc_impostos', store=True)
tributos = fields.One2many("dt_tst003", inverse_name = "item_id")
#api.onchange('quantidade', 'valor_unitario', 'seguro')
def _upd_valor_total(self):
self.valor_total = (self.quantidade * self.valor_unitario) + self.seguro
class DT_TST003(models.Model):
_name = "dt_tst003"
item_id = fields.Many2one("dt_tst002", string = "Ítem", required = True, ondelete='cascade')
tributo_id = fields.Char(string = "Tributo", size = 15, required = True)
base_calculo = fields.Float(string = "Base de cálculo")
aliquota = fields.Float(string = "Alíquota")
valor_tributo = fields.Float(string = "Valor do tributo")
#api.multi
def name_get(self):
result = []
for m_tst003 in self:
name = m_tst003.item_id.documento_id._name + " - " + m_tst003.item_id._name + " - " + m_tst003.tributo_id._name
result.append((m_tst003.id, name))
return result
Sample view definition:
<odoo>
<data>
<!-- VIEWS PARA NOTAS DE ENTRADA -->
<record model="ir.ui.view" id="tst001_form">
<field name="model">dt_tst001</field>
<field name="name">tst001_form</field>
<field name="arch" type="xml">
<form string="Documento de entrada">
<group colspan="1" style="margin: 0px">
<field name="documento" style="text-transform: uppercase;"/>
<field name="seguro_total"/>
</group>
<notebook>
<page string="Ítens">
<group>
<h6>
<field name="itens" context="{'form_view_ref' : 'dt_tst.tst002_form',
'tree_view_ref' : 'dt_tst.tst002_tree',
'default_itens' : itens}" force_save="1" class="oe_horizontal_separator oe_clear"/>
</h6>
</group>
</page>
</notebook>
</form>
</field>
</record>
<record model="ir.ui.view" id="tst001_tree">
<field name="model">dt_tst001</field>
<field name="name">tst001_tree</field>
<field name="arch" type="xml">
<tree string="Documentos de entrada">
<field name="documento"/>
<field name="seguro_total"/>
</tree>
</field>
</record>
<!-- ITENS -->
<record model="ir.ui.view" id="tst002_form">
<field name="model">dt_tst002</field>
<field name="name">tst002_form</field>
<field name="arch" type="xml">
<form string="Ítem de documento de entrada">
<group style="margin: 0px">
<group colspan="4" style="margin: 0px">
<field name="produto_id"/>
</group>
<group colspan="4" style="margin: 0px">
<group style="margin: 0px">
<field name="quantidade"/>
</group>
<group style="margin: 0px">
<field name="valor_unitario"/>
</group>
<group colspan="4" style="margin: 0px">
<field name="valor_total" readonly="1" options='{"always_reload": True}' />
</group>
</group>
<group colspan="4" style="margin: 0px">
<field name="seguro"/>
</group>
<field name="valor_total" invisible="1"/>
</group>
<notebook>
<page string="Tributos">
<group>
<h6>
<field name="tributos" context="{'form_view_ref' : 'dt_test.tst003_form',
'tree_view_ref' : 'dt_test.tst003_tree',
'default_tributos' : tributos,
'default_valor_total' : valor_total}" force_save="1" class="oe_horizontal_separator oe_clear"/>
</h6>
</group>
</page>
</notebook>
</form>
</field>
</record>
<record model="ir.ui.view" id="dt_fis.tst002_tree">
<field name="model">dt_tst002</field>
<field name="name">tst002_tree</field>
<field name="arch" type="xml">
<tree string="Ítens de documentos de entrada">
<field name="produto_id"/>
<field name="quantidade"/>
<field name="valor_unitario"/>
<!-- Enviar campos invisíveis para que seu conteúdo seja resgatado no formulário -->
<field name="seguro" invisible="1"/>
<field name="tributos" invisible="1"/>
</tree>
</field>
</record>
<!-- VIEWS PARA DOCUMENTOS DE ENTRADA E SAÍDA -->
<record model="ir.ui.view" id="tst003_form">
<field name="model">dt_tst003</field>
<field name="name">tst003_form</field>
<field name="arch" type="xml">
<form string="Tributos de ítem de documento fiscal">
<sheet>
<group>
<field name="tributo_id"/>
<field name="base_calculo"/>
<field name="aliquota"/>
<field name="valor_tributo"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="tst003_tree">
<field name="model">dt_tst003</field>
<field name="name">tst003_tree</field>
<field name="arch" type="xml">
<tree string="Tributos de ítem de documento fiscal">
<field name="tributo_id"/>
<field name="base_calculo"/>
<field name="aliquota"/>
<field name="valor_tributo"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="dt_test.tst001_action">
<field name="name">Documentos de entrada - teste</field>
<field name="res_model">dt_tst001</field>
<field name="view_mode">tree,form</field>
<field name="view_type">form</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('tst001_tree')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('tst001_form')})]"/>
<field name="view_type">form</field>
</record>
<menuitem name="Documentos de entrada" id="dt_test.tst001_menu" parent="dt_test.tst_menu_registros" action="dt_test.tst001_action" sequence="10"/>
</data>
</odoo>
Thank you!
well, it seems in the second class it is working because seguro field of class DT_TST002 is computed based on _recalc_impostos function. it doesn't use on_change. one more thing to note, is there are no relation between class DT_TST001 & DT_TST003.
according to your comment the on_change method would be like the following:
#api.onchange('seguro_total')
def _upd_seguro(self):
for item in self.itens:
seguro = ((item.quantidade * item.valor_unitario) / item.valor_total) * self.seguro_total
tributes = []
for tributo in item.tributos:
base_calculo = (item.valor_total + item.seguro)
valor_tributo = (item.valor_total + item.seguro) * tributo.aliquota / 100
tributes.append((1, tributo.id, {'base_calculo' : base_calculo, 'valor_tributo' : valor_tributo}))
item.update({
'seguro' : seguro
'tributos' : tributes,
})
also, please note that you can deal with relational fields as following
(0, 0, { values }) link to a new record that needs to be created with the given values dictionary
(1, ID, { values }) update the linked record with id = ID (write *values* on it)
(2, ID) remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)
(3, ID) cut the link to the linked record with id = ID (delete the relationship between the two objects but does not delete the target object itself)
(4, ID) link to existing record with id = ID (adds a relationship)
(5) unlink all (like using (3,ID) for all linked records)
(6, 0, [IDs]) replace the list of linked IDs (like using (5) then (4,ID) for each ID in the list of IDs)

Odoo 13 error in xml file while adding fields in custom module

I am getting this error while upgrading my custom module in odoo13 while upgrading it , the error is within this xml file.i have added somoe fields in xml file then it showing me this erro
error :
Odoo Server Error
Traceback (most recent call last):
File "/odoo/odoo-server/odoo/addons/base/models/ir_ui_view.py", line 392, in _check_xml
self.postprocess_and_fields(view.model, view_doc, view.id)
File "/odoo/odoo-server/odoo/addons/base/models/ir_ui_view.py", line 964, in postprocess_and_fields
self.raise_view_error(message, view_id)
File "/odoo/odoo-server/odoo/addons/base/models/ir_ui_view.py", line 592, in raise_view_error
raise ValueError(message)
ValueError: Field state does not exist
Error context:
View view.demo.form
[view_id: 1710, xml_id: gunalan_demo.request_form, model: car.request, parent_id: n/a]
models.py:
# -*- coding: utf-8 -*-
from odoo import models, fields, api , _
class gunalan_demo(models.Model):
_name = 'car.request' #Tables in DB =>car_request
_description = 'demo module'
name = fields.Char(string="Request_demo",required = True ,)
date_from = fields.Datetime(string='starting date',default=fields.Datetime.now(),)
date_to = fields.Datetime(string='Ending date',required=False,)
emplyoee_id= fields.Many2one(comodel_name="hr.employee", string="Emplyoee ", required=True,)
car_id = fields.Many2one(comodel_name="fleet.vehicle", string="Car ", required=True,)
state = fields.Selection(string="Status", selection=[('draft', 'Draft'), ('confirm', 'Confirm'),('validate','Validate'),('refuse','Refuse')('approved','Approved'),], default="draft", )
views.xml:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id ="request_form" model ="ir.ui.view">
<field name="name">view.demo.form</field>
<field name="model">car.request</field>
<field name="arch" type="xml">
<form string ="Car Request Form">
<header>
<!--<button name="" string="" class="oe_highlight" states="" type=""/>-->
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,validate,refuse,approved"/>
</header>
<sheet>
<div class="oe_title">
<label for="name" class="oe_title_only"/>
<h1>
<field name="name" placeholder="Request Demo"/>
</h1>
</div>
<group>
<group>
<field name="date_from"/>
<field name="date_to"/>
</group>
<group>
<field name="emplyoee_id"/>
<field name="car_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id='request_tree' model='ir.ui.view' >
<field name='name'>view.demo.tree</field>
<field name='model'>car.request</field>
<field name='arch' type='xml'>
<tree string='Car Request Tree'>
<field name="name"/>
<field name="emplyoee_id"/>
<field name="car_id"/>
<field name="date_from"/>
<field name="date_to"/>
</tree>
</field>
</record>
<record id="action_request_views" model="ir.actions.act_window">
<field name="name">Car Request</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">car.request</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Car Request
</p><p>
Click here to add
</p>
</field>
</record>
<!-- This Menu Item will appear in the Upper bar, That's why It needs NO parent or action -->
<menuitem id="menu_car_request_root" name="Car Request" sequence="10"/>
<menuitem id="menu_car_request_categ" name="Car Request" parent="menu_car_request_root" sequence="1"/>
<menuitem id="menu_car_request" name="Car Request" parent="menu_car_request_categ" action="action_request_views" sequence="1"/>
Make sure you have added your model.py file in init.py file. If you have added model.py inside model folder, then make sure model is given in init.py file.

Odoo - calculation on add or edit of one2many field

I have customer and deposit field in customer form which is one2many actually but user add a line in deposit and submit or edit some existing. I want to do some calculations on that event . I tried onchange and compute both but its not working.
add or edit One2many fields is FormView.
so you just put the field what you what to do calculate in FormView *.xml
Ex. with my SUM fields
<record model="ir.ui.view" id="view_nstda_bst_dbill_form">
<field name="name">nstda.bst.dbill.form</field>
<field name="model">nstda.bst.dbill</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="nstda_bst_dbill" class="nstda_bst_dbill_form" >
<group>
<field name="status" invisible="1" />
<field name="matno" />
<!-- <field name="matdesc" /> -->
<label for="balance" />
<div>
<field name="balance" style="width: 20%%" />
<field name="uom_1" style="width: 10%%;"
attrs="{'invisible':[('matno','=',False)]}" />
</div>
<label for="balance_rs" />
<div>
<field name="balance_rs" style="color:Red;width: 20%%" />
<field name="uom_2" style="width: 10%%;"
attrs="{'invisible':[('matno','=',False)]}" />
</div>
<label for="qty" />
<div>
<field name="qty" style="width: 20%%"
attrs="{'required':[('status','in',['draft','edit',False])]}" />
<field name="uom" style="width: 10%%;"
attrs="{'invisible':[('matno','=',False)]}" />
</div>
<!-- <field name="unitprice" /> -->
<label for="unitprice" />
<div>
<field name="unitprice" style="width: 20%%" />
<field name="currency" style="width: 10%%;" />
</div>
<field name="sum" invisible="1" />
<field name="dbill_discount_sum" invisible="1" />
</group>
</form>
</field>
</record>
and the *.py side is...
Ex.
#api.one
#api.onchange('qty','matno')
#api.depends('qty','matno')
def _set_sum(self):
self.sum = self.unitprice * self.qty
sum = fields.Float(string="summary", store=True, compute='_set_sum')
matno = fields.Many2one('bst.stock', 'matno')
qty = fields.Integer('qty')

How to add icon in list view Odoo?

Is it possible add icon instead text in list view?
Example:
<field name="status" />
If status = phone display (icon="fa-phone) else status = fax display (icon="fa-fax).
Field display with string fax or phone.
You need to change icon name.
Try with this:
<field name="status" invisible='1'/>
<button name="status" icon="fa-check text-success" attrs="{'invisible': ['|',('status','=','phone')]}" />
<button name="status" icon="fa-times-circle text-danger" attrs="{'invisible': ['|',('status','=','fax')]}" />

Mule-SAP Connector Error Message "Please enter sold-to party or ship-to party"

Am using Mule-Sap Connector(v)3.5.0 to Create Sales-Order.
I see following error message in RETURN
Row 0
Type: E
ID: VP
Message: Please enter sold-to party or ship-to party
Row 1
Type: E
ID: V4
Message: Sales document was not changed
Mapping Details
Code Snippet:
<sap:outbound-endpoint exchange-pattern="request-response"
type="function" functionName="BAPI_SALESORDER_CREATEFROMDAT2"
xmlVersion="2" outputXml="true" responseTimeout="10000"
connector-ref="sap-connector" doc:name="create-sales-order">
<sap:definition><![CDATA[
<jco>
<import>
<structure name="ORDER_HEADER_IN">
<field name="DOC_TYPE">ZBV1</field>
<field name="SALES_ORG">1000</field>
<field name="DISTR_CHAN">6</field>
<field name="DIVISION">1</field>
<field name="SALES_OFF">MCT</field>
<field name="SALES_GRP">2</field>
</structure>
</import>
<tables>
<table name="ORDER_PARTNERS">
<row id="0">
<field name="PARTN_ROLE">PE</field>//Customer sold to party
<field name="PARTN_NUMB">4275</field>
</row>
<row id="1">
<field name="PARTN_ROLE">SP</field> //Employee sold to party
<field name="PARTN_NUMB">60001039</field>
</row>
</table>
<table name="ORDER_SCHEDULES_IN">
<row id="0">
<field name="REQ_QTY">1</field>
</row>
</table>
<table name="ORDER_ITEMS_IN">
<row id="0">
<field name="MATERIAL">11753</field>
<field name="SALES_UNIT">EA</field>
<field name="PLANT">D006</field>
<field name="BATCH">384</field>
</row>
</table>
</tables>
</jco>]]></sap:definition>
</sap:outbound-endpoint>
By the error message i insist that sold-to party is not correctly mapped.
So can any one please help me, how do i map sold-to party and where am going wrong.
Many Thanks..
Try with 'AG' instead of 'SP'. I faced the same problem which resolved by putting AG as PARTN_ROLE.