@gisce/react-ooui 0.10.2 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1108,7 +1108,7 @@ export default {
1108
1108
  },
1109
1109
  form: {
1110
1110
  arch:
1111
- '<form string="polisses">\n <group attrs="{\'invisible\': [(\'state\', \'!=\', \'tall\')]}" col="14">\n <group colspan="6"/>\n <group colspan="2" attrs="{\'invisible\': [(\'state\', \'!=\',\'tall\')]}" name="group_state_tall">\n <image name="gtk-cut"/>\n <label fill="1" string="&lt;b&gt;Atenció!&lt;/b&gt; aquest contracte està en estat Tall"/>\n </group>\n <group colspan="6"/>\n </group>\n <group attrs="{\'invisible\': [(\'state\', \'!=\', \'baixa\')]}" col="14">\n <group colspan="4"/>\n <group colspan="2" attrs="{\'invisible\': [(\'state\', \'!=\',\'baixa\')]}">\n <image name="gtk-stop"/>\n <label fill="1" string="&lt;b&gt;Atenció!&lt;/b&gt; aquest contracte està en estat Baixa"/>\n </group>\n <group colspan="8"/>\n </group>\n <group attrs="{\'invisible\': [(\'state\', \'!=\', \'facturacio\')]}" col="14">\n <group colspan="2"/>\n <group colspan="2"/>\n <group colspan="2"/>\n <group colspan="2">\n <image name="gtk-dialog-warning"/>\n <label fill="1" string="&lt;b&gt;Atenció!&lt;/b&gt; en aquests moments s\'està facturant. Actualitzi d\'aquí uns minuts."/>\n </group>\n <group colspan="2"/>\n <group colspan="2"/>\n <group colspan="2"/>\n </group>\n <group colspan="8" col="8">\n <field name="pending_state" select="2" widget="indicator" widget_props="{\'card\': true, \'icon\': \'audit\'}" />\n <field name="pending_amount" select="2" widget="indicator" widget_props="{\'card\': true, \'icon\': \'wallet\', \'suffix\': \'€\'}"/>\n <field name="debt_amount" select="2" widget="indicator" widget_props="{\'card\': true, \'icon\': \'wallet\', \'suffix\': \'€\'}"/>\n <field name="unpaid_invoices" select="2" widget="indicator" widget_props="{\'card\': true, \'icon\': \'file-text\'}"/>\n </group>\n <group colspan="6" col="6">\n <field name="process_id" select="2" attrs="{\'readonly\': [(\'bono_social_disponible\',\'=\', True)]}"/>\n </group>\n <group string="General" colspan="6" col="6">\n <field name="name" attrs="{\'readonly\': [(\'name_auto\', \'=\', 1)], \'required\': [(\'name_auto\', \'!=\', 1)]}"/>\n <group colspan="2">\n <field name="name_auto" attrs="{\'readonly\': [(\'name\', \'!=\', False)]}"/>\n <field name="data_firma_contracte" select="2"/>\n </group>\n <group col="2" rowspan="4" name="renovacio">\n <field name="active" select="1"/>\n <field name="renovacio_auto" select="2" attrs="{\'readonly\': [(\'data_baixa\', \'!=\', False)]}"/>\n <field name="data_alta" select="2"/>\n <field name="data_baixa" select="2" on_change="onchange_data_baixa(data_baixa, context)" attrs="{\'required\': [(\'renovacio_auto\', \'=\', 0)], \'readonly\': [(\'renovacio_auto\', \'=\', 1)]}"/>\n </group>\n <field name="distribuidora" select="1"/>\n <field name="ref_dist" select="1"/>\n <field name="titular" colspan="2" domain="[(\'customer\', \'=\', 1)]" on_change="onchange_titular(titular, pagador_sel, pagador, tipo_pago, notificacio, context)" select="1"/>\n <field name="cnae" select="2"/>\n </group>\n <notebook colspan="6">\n <page string="General">\n <separator string="Cups" colspan="4"/>\n <field name="cups" select="1" size="25"/>\n <field name="cups_direccio" colspan="4" select="1"/>\n <field name="cups_cp" invisible="1" select="2"/>\n <field name="cups_poblacio" invisible="1" select="2"/>\n <separator string="Dades tècniques" colspan="4"/>\n <group col="2" colspan="2">\n <field name="contract_type" select="2"/>\n <group colspan="2" col="4" attrs="{\'invisible\':[(\'contract_type\', \'!=\', \'09\')]}">\n <field name="expected_consumption"/>\n <button string="Calcular" name="1366" states="esborrany,validar,modcontractual" type="action" readonly="0"/>\n </group>\n <field name="tarifa" on_change="onchange_potencia(potencia, tarifa, context)" select="1"/>\n <group colspan="2" col="4">\n <field name="potencia" select="1" on_change="onchange_potencia(potencia, tarifa, context)"/>\n <button name="416" type="action" string="Normalitzar" context="{\'power\': potencia, \'tarifa_id\': tarifa, \'tensio_id\': tensio_normalitzada, \'model\': \'giscedata.polissa\', \'field\': \'potencia\'}" states="esborrany,validar,modcontractual" readonly="0"/>\n </group>\n <field name="tensio_normalitzada" select="2" on_change="onchange_tensio(tensio_normalitzada, tarifa, context)"/>\n <field name="tarifa_codi" invisible="1"/>\n <group colspan="4" attrs="{\'invisible\': [(\'tarifa_codi\',\'not in\',[\'3.1A\', \'3.1A LB\', \'6.1A\', \'6.1B\'])]}">\n <field name="lectura_en_baja" select="2"/>\n <group colspan="2" col="2" attrs="{\'invisible\': [(\'tarifa_codi\', \'!=\', \'3.1A LB\'),(\'lectura_en_baja\',\'=\',False)]}">\n <field name="trafo"/>\n </group>\n </group>\n <field name="tensio"/>\n <field name="tg" select="2"/>\n <field name="condicions_generals_id" select="2"/>\n <field name="autoconsumo" select="2"/>\n <field name="nocutoff"/>\n </group>\n <group col="2" colspan="2">\n <field name="potencies_periode" colspan="4" nolabel="1">\n </field>\n <button name="generar_periodes_potencia" states="esborrany,validar,modcontractual" string="Generar periodes" type="object" context="{\'force_genpot\': True}"/>\n </group>\n <group col="4" colspan="4" attrs="{\'invisible\':[(\'persona_fisica\', \'=\', \'CI\')]}">\n <separator string="Altres dades" colspan="4"/>\n </group>\n <group col="4" colspan="2" attrs="{\'invisible\':[(\'persona_fisica\', \'=\', \'CI\')]}">\n <field name="tipus_vivenda" select="1"/>\n <field name="persona_fisica" invisible="1"/>\n </group>\n </page>\n <page string="Autoconsum" attrs="{\'invisible\':[(\'autoconsumo\',\'=\',\'00\')]}">\n <separator string="Informacio de l\'autoconsumo del CUPS associat" colspan="6"/>\n <group>\n <field name="autoconsum_id" attrs="{\'required\':[(\'autoconsumo\',\'!=\',\'00\'), (\'state\',\'in\',[\'validar\',\'modcontractual\'])]}" on_change="onchange_autoconsum_id(autoconsum_id)"/>\n <field name="ac_state"/>\n <group attrs="{\'invisible\':[(\'is_autoconsum_collectiu\',\'=\',False)]}">\n <field name="coef_repartiment" attrs="{\'required\':[(\'autoconsumo\',\'!=\',\'00\'), (\'is_autoconsum_collectiu\',\'=\',True), (\'state\',\'in\',[\'validar\',\'modcontractual\'])]}"/>\n </group>\n <field name="is_autoconsum_collectiu"/>\n <group attrs="{\'invisible\':[(\'is_autoconsum_collectiu\',\'!=\', True)]}">\n <field name="coef_repartiment" attrs="{\'required\':[(\'autoconsumo\',\'!=\',\'00\'), (\'is_autoconsum_collectiu\',\'=\',True), (\'state\',\'in\',[\'validar\',\'modcontractual\'])]}"/>\n </group>\n </group>\n </page>\n <page string="Facturació"><separator string="Facturació" colspan="4"/>\n <field name="facturacio" select="1"/>\n <group col="2" colspan="2" string="Lot Facturació">\n <field name="lot_facturacio" select="1"/><field name="facturacio_suspesa" select="2" colspan="1"/>\n \n </group>\n <group col="2" colspan="2">\n <field name="facturacio_potencia" select="2"/>\n <field name="property_unitat_potencia"/>\n <field name="deposit"/>\n </group>\n <group string="Dates últimes lectures facturades" col="2" colspan="2" rowspan="1">\n <field string="Real" name="data_ultima_lectura" select="2"/>\n <field string="Estimada" name="data_ultima_lectura_estimada"/><field name="refacturacio_pendent"/>\n \n </group>\n <newline/>\n <separator string="Tarificació" colspan="4"/>\n <field name="llista_preu" select="1" domain="[(\'tarifes_atr_compatibles\', \'=\', tarifa), (\'type\', \'=\', \'sale\')]"/>\n <!-- Dos dominis, la llista de preus que tingui i que la data_end sigui > now() -->\n <field name="versio_primera_factura" domain="[(\'pricelist_id\', \'=\', llista_preu), \'|\', (\'date_end\', \'&gt;\', data_alta), (\'date_end\', \'=\', False),]"/>\n <separator string="Pagament" colspan="4"/>\n <field name="payment_term" select="2"/>\n <field name="tipo_pago" on_change="onchange_tipo_pago(tipo_pago, pagador, context)" invisible="1"/>\n <field name="payment_mode_id" select="2" on_change="onchange_modo_pago(payment_mode_id, pagador, context)"/>\n <newline/>\n <field name="bank" on_change="onchange_bank(propietari_bank, bank)" attrs="{\'readonly\': [(\'tipo_pago.code\', \'=\', \'RECIBO_CSB\')]}" domain="[(\'partner_id\', \'=\', pagador)]"/>\n <field name="propietari_bank"/>\n <group col="4" colspan="4">\n <separator string="Facturació de distribuidora" colspan="4"/>\n <group colspan="2">\n <field name="facturacio_distri"/>\n </group>\n </group>\n </page>\n <page string="Contactes">\n <separator string="Titular" colspan="4"/>\n <field name="titular_nif" select="1"/>\n <field name="representante_id" colspan="4"/>\n <group colspan="4" col="6">\n <separator string="Privacitat" colspan="6"/>\n <field name="no_cessio_sips"/>\n <field name="no_cessio_sips_data"/><button string="Solicitar no cesión" type="action" icon="gtk-no" name="1622" colspan="1" readonly="0"/>\n </group>\n <field name="user_id" invisible="1"/>\n <newline/>\n <separator colspan="4" string="Dades fiscals"/>\n <field name="pagador_sel" colspan="4" domain="[(\'customer\', \'=\', 1)]" on_change="onchange_pagador_sel(pagador_sel, titular, pagador, direccio_pagament, tipo_pago, notificacio, context)"/>\n <group colspan="4" col="4">\n <field name="pagador" on_change="onchange_altre_pagador(pagador, notificacio, context)" select="1"/>\n <field name="pagador_nif"/>\n </group>\n <field name="direccio_pagament" colspan="4" domain="[(\'partner_id\', \'=\', pagador), (\'type\', \'=\', \'invoice\')]" select="1" on_change="onchange_direccio_fiscal(direccio_pagament)"/>\n <field name="enviament"/>\n <group colspan="2" col="2" attrs="{\'invisible\': [(\'enviament\', \'=\', \'postal\')]}">\n <field name="pagador_email"/>\n </group>\n <separator colspan="4" string="Notificació"/>\n <field name="notificacio" on_change="onchange_notificacio(notificacio, titular, pagador, altre_p, context)"/>\n <group attrs="{\'invisible\': [(\'notificacio\', \'!=\', \'altre_p\')]}" colspan="4">\n <field name="altre_p" colspan="4" on_change="onchange_altre_p(altre_p, context)"/>\n </group>\n <field name="direccio_notificacio" colspan="4" domain="[(\'partner_id\', \'=\', titular)]" select="2"/>\n <group colspan="2" col="2" attrs="{\'invisible\': [(\'enviament\', \'=\', \'postal\')]}">\n <field name="notificacio_email"/>\n </group>\n <group colspan="2">\n <field name="bono_social_disponible"/>\n </group>\n </page>\n <page string="Comercial">\n <separator string="Dades Comercials" colspan="8"/>\n <group colspan="8" col="8" string="Comercial">\n <field name="comercial_id" colspan="4" select="1"/>\n <field name="comissio" domain="[(\'id\', \'in\', [])]" colspan="8"/>\n <button name="action_asignar_comissio_from_comercial" type="object" string="Asignar comissio del comercial" colspan="1"/>\n <field name="codigo_promocional" select="2" colspan="8"/>\n </group>\n </page>\n <page string="Modificacions contr.">\n <field name="modcontractual_activa" search="1"/>\n <field name="modcontractuals_ids" colspan="4" nolabel="1"/>\n </page>\n <page string="Observacions">\n <label colspan="4" string="Les observacions que s\'escriguin aquí queden historitzades en les modificacions contractuals. Cada modificació contractual fa una còpia de les observacions actuals."/>\n <separator string="Observacions" colspan="4"/>\n <field name="observacions" nolabel="1" colspan="4" select="1"/>\n <separator string="Observacions impresses" colspan="4"/>\n <field name="print_observations" nolabel="1" colspan="4"/>\n </page>\n <page string="Perfils">\n <group colspan="2" col="4" string="Nivells d\'agregació">\n <separator string="Tensió" colspan="1"/>\n <separator string="Tarifa" colspan="1"/>\n <separator string="DH" colspan="1"/>\n <separator string="Tipus" colspan="1"/>\n <field name="agree_tensio" nolabel="1"/>\n <field name="agree_tarifa" nolabel="1"/>\n <field name="agree_dh" nolabel="1"/>\n <field name="agree_tipus" nolabel="1"/>\n </group>\n </page>\n <page string="Històric">\n <field name="log_ids" colspan="4" nolabel="1"/>\n </page>\n <page string="Documents rel.">\n <field name="related_attachments" colspan="4" nolabel="1"/>\n </page>\n <page string="Comptadors">\n <field name="comptador" invisible="1" select="1"/>\n <field name="comptadors" nolabel="1" colspan="4" context="{\'polissa_id\':active_id}"/>\n </page>\n <page string="Butlletins">\n <field name="butlletins" colspan="4" nolabel="1" context="{\'polissa_id\': active_id, \'default_cups_id\': cups}"/>\n </page>\n </notebook>\n <group colspan="2" col="4">\n <field name="state" select="1"/>\n <group col="15" colspan="2">\n <button name="esborrany" string="Esborrany" states="validar,pendent" readonly="0"/>\n <button name="cancelar" string="Cancel·lar" states="esborrany,activa" confirm="Està segur que vol cancel·lar aquesta pòlissa?" readonly="0"/>\n <button name="baixa" string="Baixa" states="activa,impagament,tall" readonly="0"/>\n <button name="impagament" string="Impagament" states="activa" confirm="Està segur que vol passar a estat d\'impagament aquesta pòlissa?" readonly="0"/>\n <button name="validar" string="Validar" states="esborrany" readonly="0"/>\n <button name="activar" string="Activar" states="impagament,tall,cancelada" readonly="0"/>\n <button name="to_draft" string="Passar a Esborrany" states="cancelada" readonly="0"/>\n <button name="contracte" string="Activar" states="validar" readonly="0"/>\n <button name="reactivar" string="Reactivar" states="baixa" confirm="Està segur que vol reactivar?" readonly="0"/>\n <button name="tallar" string="Tallar" states="impagament" confirm="Està segur que vol passar a estat de tall aquesta pòlissa?" readonly="0"/>\n <button name="modcontractual" string="Modificació contractual" states="activa" readonly="0"/>\n <button name="undo_modcontractual" string="Desfer mod. contractual" states="modcontractual" readonly="0"/>\n <button type="action" name="418" string="Crear nova modificació contractual" states="modcontractual" readonly="0"/>\n </group>\n </group>\n </form>',
1111
+ '<form string="polisses">\n <group attrs="{\'invisible\': [(\'state\', \'!=\', \'tall\')]}" col="14">\n <group colspan="6"/>\n <group colspan="2" attrs="{\'invisible\': [(\'state\', \'!=\',\'tall\')]}" name="group_state_tall">\n <image name="gtk-cut"/>\n <label fill="1" string="&lt;b&gt;Atenció!&lt;/b&gt; aquest contracte està en estat Tall"/>\n </group>\n <group colspan="6"/>\n </group>\n <group attrs="{\'invisible\': [(\'state\', \'!=\', \'baixa\')]}" col="14">\n <group colspan="4"/>\n <group colspan="2" attrs="{\'invisible\': [(\'state\', \'!=\',\'baixa\')]}">\n <image name="gtk-stop"/>\n <label fill="1" string="&lt;b&gt;Atenció!&lt;/b&gt; aquest contracte està en estat Baixa"/>\n </group>\n <group colspan="8"/>\n </group>\n <group attrs="{\'invisible\': [(\'state\', \'!=\', \'facturacio\')]}" col="14">\n <group colspan="2"/>\n <group colspan="2"/>\n <group colspan="2"/>\n <group colspan="2">\n <image name="gtk-dialog-warning"/>\n <label fill="1" string="&lt;b&gt;Atenció!&lt;/b&gt; en aquests moments s\'està facturant. Actualitzi d\'aquí uns minuts."/>\n </group>\n <group colspan="2"/>\n <group colspan="2"/>\n <group colspan="2"/>\n </group>\n <group colspan="8" col="8">\n <field name="pending_state" select="2" widget="indicator" widget_props="{\'card\': true, \'icon\': \'audit\'}" />\n <field name="pending_amount" select="2" widget="indicator" widget_props="{\'card\': true, \'icon\': \'wallet\', \'suffix\': \'€\'}"/>\n <field name="debt_amount" select="2" widget="indicator" widget_props="{\'card\': true, \'icon\': \'wallet\', \'suffix\': \'€\'}"/>\n <field name="unpaid_invoices" select="2" widget="indicator" widget_props="{\'card\': true, \'icon\': \'file-text\'}"/>\n </group>\n <group colspan="6" col="6">\n <field name="process_id" select="2" attrs="{\'readonly\': [(\'bono_social_disponible\',\'=\', True)]}"/>\n </group>\n <group string="General" colspan="6" col="6">\n <field name="name" attrs="{\'readonly\': [(\'name_auto\', \'=\', 1)], \'required\': [(\'name_auto\', \'!=\', 1)]}"/>\n <group colspan="2">\n <field name="name_auto" attrs="{\'readonly\': [(\'name\', \'!=\', False)]}"/>\n <field name="data_firma_contracte" select="2"/>\n </group>\n <group col="2" rowspan="4" name="renovacio">\n <field name="active" select="1"/>\n <field name="renovacio_auto" select="2" attrs="{\'readonly\': [(\'data_baixa\', \'!=\', False)]}"/>\n <field name="data_alta" select="2"/>\n <field name="data_baixa" select="2" on_change="onchange_data_baixa(data_baixa, context)" attrs="{\'required\': [(\'renovacio_auto\', \'=\', 0)], \'readonly\': [(\'renovacio_auto\', \'=\', 1)]}"/>\n </group>\n <field name="distribuidora" select="1"/>\n <field name="ref_dist" select="1"/>\n <field name="titular" colspan="2" domain="[(\'customer\', \'=\', 1)]" on_change="onchange_titular(titular, pagador_sel, pagador, tipo_pago, notificacio, context)" select="1"/>\n <field name="cnae" select="2"/>\n </group>\n <notebook colspan="6">\n <page string="General">\n <separator string="Cups" colspan="4"/>\n <field name="cups" select="1" size="25"/>\n <field name="cups_direccio" colspan="4" select="1"/>\n <field name="cups_cp" invisible="1" select="2"/>\n <field name="cups_poblacio" invisible="1" select="2"/>\n <separator string="Dades tècniques" colspan="4"/>\n <group col="2" colspan="2">\n <field name="contract_type" select="2"/>\n <group colspan="2" col="4" attrs="{\'invisible\':[(\'contract_type\', \'!=\', \'09\')]}">\n <field name="expected_consumption"/>\n <button string="Calcular" name="1366" states="esborrany,validar,modcontractual" type="action" readonly="0"/>\n </group>\n <field name="tarifa" on_change="onchange_potencia(potencia, tarifa, context)" select="1"/>\n <group colspan="2" col="4">\n <field name="potencia" select="1" on_change="onchange_potencia(potencia, tarifa, context)"/>\n <button name="416" type="action" string="Normalitzar" context="{\'power\': potencia, \'tarifa_id\': tarifa, \'tensio_id\': tensio_normalitzada, \'model\': \'giscedata.polissa\', \'field\': \'potencia\'}" states="esborrany,validar,modcontractual" readonly="0"/>\n </group>\n <field name="tensio_normalitzada" select="2" on_change="onchange_tensio(tensio_normalitzada, tarifa, context)"/>\n <field name="tarifa_codi" invisible="1"/>\n <group colspan="4" attrs="{\'invisible\': [(\'tarifa_codi\',\'not in\',[\'3.1A\', \'3.1A LB\', \'6.1A\', \'6.1B\'])]}">\n <field name="lectura_en_baja" select="2"/>\n <group colspan="2" col="2" attrs="{\'invisible\': [(\'tarifa_codi\', \'!=\', \'3.1A LB\'),(\'lectura_en_baja\',\'=\',False)]}">\n <field name="trafo"/>\n </group>\n </group>\n <field name="tensio"/>\n <field name="tg" select="2"/>\n <field name="condicions_generals_id" select="2"/>\n <field name="autoconsumo" select="2"/>\n <field name="nocutoff"/>\n </group>\n <group col="2" colspan="2">\n <field name="potencies_periode" colspan="4" nolabel="1">\n </field>\n <button name="generar_periodes_potencia" states="esborrany,validar,modcontractual" string="Generar periodes" type="object" context="{\'force_genpot\': True}"/>\n </group>\n <group col="4" colspan="4" attrs="{\'invisible\':[(\'persona_fisica\', \'=\', \'CI\')]}">\n <separator string="Altres dades" colspan="4"/>\n </group>\n <group col="4" colspan="2" attrs="{\'invisible\':[(\'persona_fisica\', \'=\', \'CI\')]}">\n <field name="tipus_vivenda" select="1"/>\n <field name="persona_fisica" invisible="1"/>\n </group>\n </page>\n <page string="Autoconsum" attrs="{\'invisible\':[(\'autoconsumo\',\'=\',\'00\')]}">\n <separator string="Informacio de l\'autoconsumo del CUPS associat" colspan="6"/>\n <group>\n <field name="autoconsum_id" attrs="{\'required\':[(\'autoconsumo\',\'!=\',\'00\'), (\'state\',\'in\',[\'validar\',\'modcontractual\'])]}" on_change="onchange_autoconsum_id(autoconsum_id)"/>\n <field name="ac_state"/>\n <group attrs="{\'invisible\':[(\'is_autoconsum_collectiu\',\'=\',False)]}">\n <field name="coef_repartiment" attrs="{\'required\':[(\'autoconsumo\',\'!=\',\'00\'), (\'is_autoconsum_collectiu\',\'=\',True), (\'state\',\'in\',[\'validar\',\'modcontractual\'])]}"/>\n </group>\n <field name="is_autoconsum_collectiu"/>\n <group attrs="{\'invisible\':[(\'is_autoconsum_collectiu\',\'!=\', True)]}">\n <field name="coef_repartiment" attrs="{\'required\':[(\'autoconsumo\',\'!=\',\'00\'), (\'is_autoconsum_collectiu\',\'=\',True), (\'state\',\'in\',[\'validar\',\'modcontractual\'])]}"/>\n </group>\n </group>\n </page>\n <page string="Facturació"><separator string="Facturació" colspan="4"/>\n <field name="facturacio" select="1" widget="radio"/>\n <group col="2" colspan="2" string="Lot Facturació">\n <field name="lot_facturacio" select="1"/><field name="facturacio_suspesa" select="2" colspan="1"/>\n \n </group>\n <group col="2" colspan="2">\n <field name="facturacio_potencia" select="2"/>\n <field name="property_unitat_potencia"/>\n <field name="deposit"/>\n </group>\n <group string="Dates últimes lectures facturades" col="2" colspan="2" rowspan="1">\n <field string="Real" name="data_ultima_lectura" select="2"/>\n <field string="Estimada" name="data_ultima_lectura_estimada"/><field name="refacturacio_pendent"/>\n \n </group>\n <newline/>\n <separator string="Tarificació" colspan="4"/>\n <field name="llista_preu" select="1" domain="[(\'tarifes_atr_compatibles\', \'=\', tarifa), (\'type\', \'=\', \'sale\')]"/>\n <!-- Dos dominis, la llista de preus que tingui i que la data_end sigui > now() -->\n <field name="versio_primera_factura" domain="[(\'pricelist_id\', \'=\', llista_preu), \'|\', (\'date_end\', \'&gt;\', data_alta), (\'date_end\', \'=\', False),]"/>\n <separator string="Pagament" colspan="4"/>\n <field name="payment_term" select="2"/>\n <field name="tipo_pago" on_change="onchange_tipo_pago(tipo_pago, pagador, context)" invisible="1"/>\n <field name="payment_mode_id" select="2" on_change="onchange_modo_pago(payment_mode_id, pagador, context)"/>\n <newline/>\n <field name="bank" on_change="onchange_bank(propietari_bank, bank)" attrs="{\'readonly\': [(\'tipo_pago.code\', \'=\', \'RECIBO_CSB\')]}" domain="[(\'partner_id\', \'=\', pagador)]"/>\n <field name="propietari_bank"/>\n <group col="4" colspan="4">\n <separator string="Facturació de distribuidora" colspan="4"/>\n <group colspan="2">\n <field name="facturacio_distri"/>\n </group>\n </group>\n </page>\n <page string="Contactes">\n <separator string="Titular" colspan="4"/>\n <field name="titular_nif" select="1"/>\n <field name="representante_id" colspan="4"/>\n <group colspan="4" col="6">\n <separator string="Privacitat" colspan="6"/>\n <field name="no_cessio_sips"/>\n <field name="no_cessio_sips_data"/><button string="Solicitar no cesión" type="action" icon="gtk-no" name="1622" colspan="1" readonly="0"/>\n </group>\n <field name="user_id" invisible="1"/>\n <newline/>\n <separator colspan="4" string="Dades fiscals"/>\n <field name="pagador_sel" colspan="4" domain="[(\'customer\', \'=\', 1)]" on_change="onchange_pagador_sel(pagador_sel, titular, pagador, direccio_pagament, tipo_pago, notificacio, context)"/>\n <group colspan="4" col="4">\n <field name="pagador" on_change="onchange_altre_pagador(pagador, notificacio, context)" select="1"/>\n <field name="pagador_nif"/>\n </group>\n <field name="direccio_pagament" colspan="4" domain="[(\'partner_id\', \'=\', pagador), (\'type\', \'=\', \'invoice\')]" select="1" on_change="onchange_direccio_fiscal(direccio_pagament)"/>\n <field name="enviament"/>\n <group colspan="2" col="2" attrs="{\'invisible\': [(\'enviament\', \'=\', \'postal\')]}">\n <field name="pagador_email"/>\n </group>\n <separator colspan="4" string="Notificació"/>\n <field name="notificacio" on_change="onchange_notificacio(notificacio, titular, pagador, altre_p, context)"/>\n <group attrs="{\'invisible\': [(\'notificacio\', \'!=\', \'altre_p\')]}" colspan="4">\n <field name="altre_p" colspan="4" on_change="onchange_altre_p(altre_p, context)"/>\n </group>\n <field name="direccio_notificacio" colspan="4" domain="[(\'partner_id\', \'=\', titular)]" select="2"/>\n <group colspan="2" col="2" attrs="{\'invisible\': [(\'enviament\', \'=\', \'postal\')]}">\n <field name="notificacio_email"/>\n </group>\n <group colspan="2">\n <field name="bono_social_disponible"/>\n </group>\n </page>\n <page string="Comercial">\n <separator string="Dades Comercials" colspan="8"/>\n <group colspan="8" col="8" string="Comercial">\n <field name="comercial_id" colspan="4" select="1"/>\n <field name="comissio" domain="[(\'id\', \'in\', [])]" colspan="8"/>\n <button name="action_asignar_comissio_from_comercial" type="object" string="Asignar comissio del comercial" colspan="1"/>\n <field name="codigo_promocional" select="2" colspan="8"/>\n </group>\n </page>\n <page string="Modificacions contr.">\n <field name="modcontractual_activa" search="1"/>\n <field name="modcontractuals_ids" colspan="4" nolabel="1"/>\n </page>\n <page string="Observacions">\n <label colspan="4" string="Les observacions que s\'escriguin aquí queden historitzades en les modificacions contractuals. Cada modificació contractual fa una còpia de les observacions actuals."/>\n <separator string="Observacions" colspan="4"/>\n <field name="observacions" nolabel="1" colspan="4" select="1"/>\n <separator string="Observacions impresses" colspan="4"/>\n <field name="print_observations" nolabel="1" colspan="4"/>\n </page>\n <page string="Perfils">\n <group colspan="2" col="4" string="Nivells d\'agregació">\n <separator string="Tensió" colspan="1"/>\n <separator string="Tarifa" colspan="1"/>\n <separator string="DH" colspan="1"/>\n <separator string="Tipus" colspan="1"/>\n <field name="agree_tensio" nolabel="1"/>\n <field name="agree_tarifa" nolabel="1"/>\n <field name="agree_dh" nolabel="1"/>\n <field name="agree_tipus" nolabel="1"/>\n </group>\n </page>\n <page string="Històric">\n <field name="log_ids" colspan="4" nolabel="1"/>\n </page>\n <page string="Documents rel.">\n <field name="related_attachments" colspan="4" nolabel="1"/>\n </page>\n <page string="Comptadors">\n <field name="comptador" invisible="1" select="1"/>\n <field name="comptadors" nolabel="1" colspan="4" context="{\'polissa_id\':active_id}"/>\n </page>\n <page string="Butlletins">\n <field name="butlletins" colspan="4" nolabel="1" context="{\'polissa_id\': active_id, \'default_cups_id\': cups}"/>\n </page>\n </notebook>\n <group colspan="2" col="4">\n <field name="state" select="1"/>\n <group col="15" colspan="2">\n <button name="esborrany" string="Esborrany" states="validar,pendent" readonly="0"/>\n <button name="cancelar" string="Cancel·lar" states="esborrany,activa" confirm="Està segur que vol cancel·lar aquesta pòlissa?" readonly="0"/>\n <button name="baixa" string="Baixa" states="activa,impagament,tall" readonly="0"/>\n <button name="impagament" string="Impagament" states="activa" confirm="Està segur que vol passar a estat d\'impagament aquesta pòlissa?" readonly="0"/>\n <button name="validar" string="Validar" states="esborrany" readonly="0"/>\n <button name="activar" string="Activar" states="impagament,tall,cancelada" readonly="0"/>\n <button name="to_draft" string="Passar a Esborrany" states="cancelada" readonly="0"/>\n <button name="contracte" string="Activar" states="validar" readonly="0"/>\n <button name="reactivar" string="Reactivar" states="baixa" confirm="Està segur que vol reactivar?" readonly="0"/>\n <button name="tallar" string="Tallar" states="impagament" confirm="Està segur que vol passar a estat de tall aquesta pòlissa?" readonly="0"/>\n <button name="modcontractual" string="Modificació contractual" states="activa" readonly="0"/>\n <button name="undo_modcontractual" string="Desfer mod. contractual" states="modcontractual" readonly="0"/>\n <button type="action" name="418" string="Crear nova modificació contractual" states="modcontractual" readonly="0"/>\n </group>\n </group>\n </form>',
1112
1112
  field_parent: false,
1113
1113
  fields: {
1114
1114
  ac_state: {
@@ -0,0 +1,15 @@
1
+ export default {
2
+ model: "res.partner.category",
3
+ exampleValues: {
4
+ id: 1,
5
+ name: "foo",
6
+ },
7
+ form: {
8
+ fields: {
9
+ name: {
10
+ string: "Name",
11
+ type: "char",
12
+ },
13
+ }
14
+ }
15
+ }
@@ -24,6 +24,7 @@ import {
24
24
  Email,
25
25
  FloatTime,
26
26
  ProgressBar,
27
+ Radio,
27
28
  } from "@/index";
28
29
  import { Image } from "./base/Image";
29
30
  import { FiberGrid } from "./custom/FiberGrid";
@@ -91,6 +92,8 @@ const getWidgetType = (type: string) => {
91
92
  return Indicator;
92
93
  case "tags":
93
94
  return Tags;
95
+ case "radio":
96
+ return Radio;
94
97
  default:
95
98
  return undefined;
96
99
  }
@@ -1,8 +1,9 @@
1
1
  import React from "react";
2
- import { Tooltip } from "antd";
2
+ import { Tooltip, Typography } from "antd";
3
3
  import { WidgetProps } from "@/types";
4
4
  import { QuestionCircleOutlined } from "@ant-design/icons";
5
5
  import { Label as LabelOoui } from "@gisce/ooui";
6
+ const { Text, Title } = Typography;
6
7
 
7
8
  type Props = WidgetProps & {
8
9
  align?: "left" | "center" | "right";
@@ -17,12 +18,20 @@ const alignClass = {
17
18
 
18
19
  const Label = (props: Props) => {
19
20
  const { ooui, align, responsiveBehaviour } = props;
20
- const { label, tooltip, fieldForLabel } = ooui as LabelOoui;
21
+ const {
22
+ label,
23
+ tooltip,
24
+ fieldForLabel,
25
+ labelSize,
26
+ labelType,
27
+ } = ooui as LabelOoui;
21
28
  const addColon = fieldForLabel !== null ? true : false;
22
29
  const labelText = addColon && label.length > 1 ? label + " :" : label;
23
30
  const responsiveAlign = responsiveBehaviour ? "left" : "right";
24
31
  const labelAlgin = align ? align : fieldForLabel ? responsiveAlign : "left";
25
32
 
33
+ const TextType = labelSize === "text" ? Text : Title;
34
+
26
35
  return (
27
36
  <div
28
37
  className={`flex flex-row items-center pb-1 pt-1 ${alignClass[labelAlgin]}`}
@@ -32,7 +41,14 @@ const Label = (props: Props) => {
32
41
  <QuestionCircleOutlined className="text-xs text-blue-400 pr-1" />
33
42
  </Tooltip>
34
43
  )}
35
- <span className="pr-2">{labelText}</span>
44
+ <span className="pr-2">
45
+ <TextType
46
+ level={labelSize !== "text" ? ((labelSize as string) as any) : null}
47
+ type={labelType as any}
48
+ >
49
+ {labelText}
50
+ </TextType>
51
+ </span>
36
52
  </div>
37
53
  );
38
54
  };
@@ -0,0 +1,49 @@
1
+ import React from "react";
2
+ import { Radio as RadioAnt, Space } from "antd";
3
+
4
+ import Field from "@/common/Field";
5
+ import { Radio as RadioOoui } from "@gisce/ooui";
6
+ import { WidgetProps } from "@/types";
7
+
8
+ export const Radio = (props: WidgetProps) => {
9
+ const { ooui } = props;
10
+ const { required } = ooui;
11
+
12
+ return (
13
+ <Field required={required} type={"any"} {...props}>
14
+ <SelectionInput {...props} />
15
+ </Field>
16
+ );
17
+ };
18
+
19
+ type RadioInputProps = WidgetProps & {
20
+ onChange?: (value: any) => void;
21
+ value?: string;
22
+ };
23
+
24
+ export const SelectionInput = (props: RadioInputProps) => {
25
+ const { ooui, onChange, value } = props;
26
+ const { selectionValues, readOnly, direction } = ooui as RadioOoui;
27
+
28
+ const values = Array.from(selectionValues.entries());
29
+
30
+ const options =
31
+ values &&
32
+ values.length &&
33
+ values.map((entry: string[]) => {
34
+ const [key, value] = entry;
35
+ return (
36
+ <RadioAnt key={key} value={key}>
37
+ {value}
38
+ </RadioAnt>
39
+ );
40
+ });
41
+
42
+ return (
43
+ <RadioAnt.Group disabled={readOnly} onChange={onChange} value={value}>
44
+ <Space direction={direction}>
45
+ {options}
46
+ </Space>
47
+ </RadioAnt.Group>
48
+ );
49
+ };
@@ -4,8 +4,7 @@ import Field from "@/common/Field";
4
4
  import { One2manyItem, One2manyValue } from "../base/one2many/One2manyInput";
5
5
  import useDeepCompareEffect from "use-deep-compare-effect";
6
6
  import { FormContext, FormContextType } from "@/context/FormContext";
7
- import { Spin, Alert, Timeline as AntTimeline, Tag as AntTag } from "antd";
8
- import { readObjectValues } from "@/helpers/one2manyHelper";
7
+ import { Alert, Tag as AntTag, Select } from "antd";
9
8
  import { colorFromString } from "@/helpers/formHelper";
10
9
  import ConnectionProvider from "@/ConnectionProvider";
11
10
 
@@ -31,21 +30,21 @@ export const Tags = (props: TagsProps) => {
31
30
  export const TagsInput = (props: TagsInputProps) => {
32
31
  const { value, ooui, onChange } = props;
33
32
  const { items = [] } = value || {};
33
+ const itemsToShow = items.filter(
34
+ (item) => item.operation !== "pendingRemove"
35
+ ).map((item) => item.id) as number[];
34
36
 
35
- const [isLoading, setIsLoading] = useState<boolean>(false);
37
+ const [options, setOptions] = useState<any[]>([]);
36
38
  const [error, setError] = useState<string>();
39
+ const [isLoadingOptions, setIsLoadingOptions] = useState<boolean>(false);
37
40
  const { relation, context, readOnly, field } = ooui;
38
- const itemsToShow = items.filter(
39
- (item) => item.values && item.operation !== "pendingRemove"
40
- );
41
+
41
42
 
42
43
  const formContext = useContext(FormContext) as FormContextType;
43
44
  const { getContext } = formContext || {};
44
45
 
45
46
  useDeepCompareEffect(() => {
46
- if (items.some((item) => !item.values)) {
47
- fetchData();
48
- }
47
+ fetchOptions();
49
48
  }, [items]);
50
49
 
51
50
  const triggerChange = (changedValue: Array<One2manyItem>) => {
@@ -54,79 +53,96 @@ export const TagsInput = (props: TagsInputProps) => {
54
53
  });
55
54
  };
56
55
 
57
- async function fetchData() {
58
- setIsLoading(true);
59
- setError(undefined);
60
-
61
- const fieldsDef = await ConnectionProvider.getHandler().getFields({
62
- model: relation,
63
- fields: [field],
64
- context: getContext(),
65
- });
66
-
56
+ async function fetchOptions() {
57
+ setIsLoadingOptions(true);
58
+ let params = formContext?.domain || [];
59
+ if (readOnly) {
60
+ params = [['id', 'in', itemsToShow]]
61
+ }
67
62
  try {
68
- const itemsWithValues = await readObjectValues({
69
- treeFields: {},
70
- formFields: fieldsDef,
63
+ const optionsRead = await ConnectionProvider.getHandler().search({
71
64
  model: relation,
72
- items,
65
+ params: params,
66
+ fields: [field],
73
67
  context: { ...getContext?.(), ...context },
74
68
  });
75
- triggerChange(itemsWithValues);
69
+ const options = optionsRead.map((item:any) => {
70
+ const value = item[field];
71
+ let formattedValue = value;
72
+ if (Array.isArray(value)) {
73
+ formattedValue = value[1];
74
+ }
75
+ return {label: formattedValue, value: item.id}
76
+ });
77
+ setOptions(options);
78
+
76
79
  } catch (err) {
77
- setError(err as any);
80
+ setError(err as any)
78
81
  } finally {
79
- setIsLoading(false);
82
+ setIsLoadingOptions(false);
83
+ }
84
+ if (error) {
85
+ return <Alert className="mt-10" message={error} type="error" banner />;
80
86
  }
81
- }
82
-
83
- if (error) {
84
- return <Alert className="mt-10" message={error} type="error" banner />;
85
- }
86
87
 
87
- if (isLoading) {
88
- return <Spin />;
89
- }
88
+ };
90
89
 
91
- const removeItem = (item: One2manyItem) => {
92
- const newItems: One2manyItem[] = items.map(i => {
93
- if (i.id === item.id) {
94
- return {
95
- ...item,
96
- operation: "pendingRemove",
90
+ const onChangeSelected = (ids: number[]) => {
91
+ const newItems: One2manyItem[] = items.map((item) => {
92
+ if (ids.includes(item.id as number)) {
93
+ if (item.operation == "pendingRemove") {
94
+ return {
95
+ ...item,
96
+ operation: "pendingLink"
97
+ }
98
+ } else {
99
+ return item
97
100
  }
98
101
  } else {
99
- return i
102
+ return {id: item.id, operation: 'pendingRemove'}
100
103
  }
104
+ })
105
+ const currentIds = newItems.map(item => item.id)
106
+ ids.filter(id => !currentIds.includes(id)).map((id) => {
107
+ newItems.push({id, operation: 'pendingLink'});
101
108
  });
102
109
  triggerChange(newItems);
103
110
  };
104
111
 
112
+ const tagRender = (props: any) => {
113
+ const { label, closable, onClose } = props;
114
+ const onPreventMouseDown = (event: React.MouseEvent<HTMLSpanElement>) => {
115
+ event.preventDefault();
116
+ event.stopPropagation();
117
+ };
118
+ return (
119
+ <AntTag
120
+ color={colorFromString(label)}
121
+ onMouseDown={onPreventMouseDown}
122
+ style={{margin: '5px'}}
123
+ closable={closable}
124
+ onClose={onClose}>
125
+ {label}
126
+ </AntTag>
127
+ );
128
+ };
129
+
105
130
  return (
106
131
  <>
107
132
  <div style={{ padding: "1rem" }}>
108
-
109
- {itemsToShow.map((item, index) => {
110
- const value = item.values?.[field];
111
- let formattedValue = value;
112
- if (ooui.selectionValues.size) {
113
- formattedValue = ooui.selectionValues.get(value);
114
- } else if (Array.isArray(value)) {
115
- formattedValue = value[1];
116
- }
117
- if (!value) {
118
- return null;
119
- }
120
- return (
121
- <AntTag key={index} color={colorFromString(formattedValue)} closable={!readOnly} style={{margin: '5px'}} onClose={e => {
122
- e.preventDefault();
123
- removeItem(item);
124
-
125
- }}>{formattedValue}</AntTag>
126
- );
127
- })}
133
+ <Select
134
+ mode="multiple"
135
+ value={options.length ? itemsToShow : []}
136
+ tagRender={tagRender}
137
+ bordered={!readOnly}
138
+ disabled={readOnly}
139
+ options={options}
140
+ onChange={onChangeSelected}
141
+ loading={isLoadingOptions}
142
+ >
143
+ </Select>
128
144
  </div>
129
-
130
145
  </>
131
146
  );
147
+
132
148
  };