Commit c3c5d655 by Juan

Merge branch 'juan2022' into 'master'

Juan2022

See merge request !2
2 parents 8af13e73 a8461f78
......@@ -15,6 +15,7 @@
Se Agrega generacion manual para notas de credito y notas
de debito
Se agrega soporte a gastos mobil
Se agrega cobro Avanzado
""",
'author': 'HGT',
......@@ -39,14 +40,16 @@
'security/permisos.xml',
'wizard/vista_prod_pfinal.xml',
'wizard/vista_corregir_nro_tal.xml',
'wizard/vista_generar_nota.xml',
'views/referencias.xml',
'views/gastosmobil.xml',
'views/comprobante.xml',
'views/referencia_compra.xml',
'views/menu_compras.xml',
'wizard/vista_cobro_discriminado.xml',
],
# only loaded in demonstration mode
'demo': [
'demo/demo.xml',
],
}
\ No newline at end of file
}
......@@ -3,4 +3,5 @@
from . import comprobante
from . import referencias
from . import referencia_compra
from . import gastosmobil
\ No newline at end of file
from . import gastosmobil
from . import currency
\ No newline at end of file
......@@ -2,7 +2,7 @@
from odoo import models, fields, api, exceptions
from .qr import qrfiscal
from odoo.exceptions import UserError, ValidationError, Warning, RedirectWarning
import base64
import base64, datetime
class asw_comprobante(models.Model):
_inherit = 'asw.comprobante'
......@@ -137,4 +137,31 @@ class asw_comprobante(models.Model):
'target': 'new',
}
def generarNota(self):
datos = {'gn_comprobante': self.id}
nw = self.env['tpv.generar_nota'].create(datos)
return {
'name': "Generar Nota Débito/Crédito",
'type': 'ir.actions.act_window',
'res_model': 'tpv.generar_nota',
'view_mode': 'form',
'view_type': 'form',
'res_id': nw.id,
'target': 'new',
}
def CorrejirFacturaSinCAE(self):
if not self.env.user.has_group("tpv_correcciones.module_category_tpv_corrector_electronica_admin"):
raise Warning("No tenes permiso para correjir facturas")
if self.comp_talonario.tal_es_fe == False:
raise Warning("No es factura electronica, no puedo hacer nada")
if not self.afip_auth_code_due == False:
raise Warning("Esta factura ya fue Autorizada en AFIP, si no ves el CAE, por favor reporte a soporte")
estado_actual = self.comp_estado #guardo el estado por si fue abonada
self.comp_estado = "b" #la dejo en borrador
self.comp_fecha = datetime.datetime.now().strftime('%Y-%m-%d')
self.validar() #revalido en este punto si falla se cancela todo el proceso
self.comp_estado = estado_actual #le dejo el estado original
\ No newline at end of file
# -*- coding: utf-8 -*-
from odoo import models, fields, api, exceptions
from .qr import qrfiscal
from odoo.exceptions import UserError, ValidationError, Warning, RedirectWarning
import base64, datetime
class res_currency(models.Model):
_inherit = 'res.currency'
codigo_afip = fields.Char(string='Codigo AFIP',
help="si se deja en blanco se toma pesos")
\ No newline at end of file
......@@ -6,9 +6,14 @@
</record>
<record model="res.groups" id="module_category_tpv_corrector_tal_admin">
<field name="name">Administrador</field>
<field name="name">Puede ajustar talonario</field>
<field name="category_id" eval="ref('module_category_tpv_corrector_tal')"/>
</record>
<record model="res.groups" id="module_category_tpv_corrector_electronica_admin">
<field name="name">Puede correjir facturas sin cae</field>
<field name="category_id" eval="ref('module_category_tpv_corrector_tal')"/>
</record>
</data>
</odoo>
\ No newline at end of file
......@@ -9,6 +9,7 @@
<xpath expr="//button[@name='validar']" position="before">
<button name="abrir_wizard_ppf" class='btn btn-success' string="+ Producto por precio final" type="object" attrs="{'invisible':[('comp_estado','!=','b')]}"/>
<button name="recalcularTotal" class='btn btn-warning' string="Recalcular Monto" type="object" attrs="{'invisible':[('comp_estado','!=','b')]}"/>
<button name="generarNota" class='btn btn-success' string="Generar Nota" type="object" attrs="{'invisible':[('comp_estado','in',['b','c','r'])]}"/>
</xpath>
<xpath expr="//group[1]" position="after">
<group string="Referencias" col="2">
......@@ -32,6 +33,8 @@
<button name="recalcularTotal" class='btn btn-warning' string="Recalcular Monto" type="object" attrs="{'invisible':[('comp_estado','!=','b')]}"/>
<button name="impresion_directa" class='btn btn-info' string="Impresion directa" type="object" attrs="{'invisible':[('comp_estado','=','b')]}"/>
<button name="abrir_wizard_cn" type="object" class="btn btn-info" string="Corregir núm. AFIP"/>>
<button name="generarNota" class='btn btn-success' string="Generar Nota" type="object" attrs="{'invisible':[('comp_estado','in',['b','c','r'])]}"/>
</xpath>
</data>
</field>
......@@ -44,7 +47,7 @@
<field name="arch" type="xml">
<data>
<xpath expr="//field[@name='afip_xml_response']" position="after">
<!--<field name="qr" />-->
<button name="CorrejirFacturaSinCAE" class="btn btn-warning" string="Correjir cae" type="object" colspam="2" />
<field name="referencia_orig_fact" />
<field name="referencia_orig_ptv" />
<field name="referencia_orig_numero" />
......@@ -74,4 +77,4 @@
</record>
</data>
</odoo>
\ No newline at end of file
</odoo>
<odoo>
<data>
<record id="view_form_inherit_comprobante_recibido_ui" model="ir.ui.view">
<field name="name">Moneda</field>
<field name="model">res.currency</field>
<field name="inherit_id" ref="asw_tpv.view_form_comprobante_recibido_ui"/>
<field name="arch" type="xml">
<data>
<xpath expr="//group[1]" position="after">
<group string="Referencias" col="2">
<!--<field name="referencia_corr" widget="many2many_tags" />-->
<field name="referencia_compras_corr" widget="many2many_tags" />
</group>
</xpath>
</data>
</field>
</record>
</data>
</odoo>
\ No newline at end of file
......@@ -2,6 +2,6 @@
<data>
<menuitem name="Referencias" sequence="90" id="asw_tpv_compras_referencias" parent="asw_tpv.asw_tpv_compras"/>
<menuitem name="Referencias de Compras" id="asw_tpv_compras_referencias_refcompras" parent="asw_tpv_compras_referencias" action="hgt_refcompra_list_action"/>
<menuitem name="Configuracion Mobil" sequence="99" id="asw_tpv_gasto_mobil_config" parent="asw_tpv.asw_tpv_compras_gastos" action="hgt_gastos_mobil_list_action" groups="hgt_dispositivos.group_administrador_dispositivos"/>
<!-- <menuitem name="Configuracion Mobil" sequence="99" id="asw_tpv_gasto_mobil_config" parent="asw_tpv.asw_tpv_compras_gastos" action="hgt_gastos_mobil_list_action" groups="hgt_dispositivos.group_administrador_dispositivos"/> -->
</data>
</odoo>
\ No newline at end of file
</odoo>
from . import prod_pfinal
from . import corregir_nro_tal
from . import generar_nota
from . import cobro_discriminado
# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.exceptions import UserError
from datetime import datetime
class tpv_generar_nota(models.TransientModel):
_name = 'tpv.generar_nota'
_description = 'Generar Nota'
_inherit = ['asw.generador_comprobante', 'asw.action.manager']
gn_comprobante = fields.Many2one(
string=u'Comprobante Original',
comodel_name='asw.comprobante',
)
def generar_notaCred(self):
comprobante = self.gn_comprobante
referencia = 'Reintegro del comprobante : ' + comprobante.comp_talonario.tal_codigo + "/" +comprobante.comp_nro_letras
talonario = self.env['asw.talonario'].search([('tal_pto_vta','=',comprobante.comp_talonario.tal_pto_vta),('tal_letra','=', comprobante.comp_talonario.tal_letra),('tal_codigo','in',['NCAE','NCBE'])])#es variable mover a preferecias
if talonario:
contra_comprobante = self.generar_comprobante(
talonario = talonario,
cliente = comprobante.comp_cliente,
total = comprobante.comp_total,
referencia = referencia,
comp_estado = comprobante.comp_estado,
comp_nro_letras = comprobante.comp_nro_letras,
comp_subtotal = comprobante.comp_subtotal,
comp_moneda = comprobante.comp_moneda.id,
comp_nota_credito = comprobante.id,
comprobante_caja_ids = comprobante.comprobante_caja_ids.id
)
contra_comprobante.write({
'referencia_orig_ptv': comprobante.comp_talonario.tal_pto_vta,
'referencia_orig_numero': comprobante.comp_nro,
'referencia_orig_letra': comprobante.comp_talonario.tal_letra,
'referencia_orig_fact': comprobante.id,
})
contra_comprobante.comp_fecha = datetime.today()
#linea de NCred
inter_prod = self.env['asw.producto'].search([('prod_descripcion','=','INTERES')])
linea_comp = self.env['asw.linea_comprobante'].create({
'lcp_producto': inter_prod.id,
'lcp_comprobante': contra_comprobante.id,
'lcp_precio': comprobante.comp_total,
'lcp_importe': comprobante.comp_total,
})
#contra_comprobante.validar()
#se agrega al recibo original
#comprobante.write({
# 'comp_nota_credito' : contra_comprobante.id
#})
return {
'name': "Nota de Crédito",
'type': 'ir.actions.act_window',
'res_model': 'asw.comprobante',
'view_mode': 'form',
'view_type': 'form',
'res_id': contra_comprobante.id,
'target': 'new',
}
else:
raise UserError('No existe talonario para la Nota de Crédito correspondiente. Créelo o diríjase a soporte para que lo haga, y vuelva a este menú')
def generar_notaDeb(self):
comprobante = self.gn_comprobante
referencia = 'Nota de débito del comprobante : ' + comprobante.comp_talonario.tal_codigo + "/" +comprobante.comp_nro_letras
talonario = self.env['asw.talonario'].search([('tal_pto_vta','=',comprobante.comp_talonario.tal_pto_vta),('tal_letra','=', comprobante.comp_talonario.tal_letra),('tal_codigo','in',['NDAN','NDBN','NDAE', 'NDBE'])])
if talonario:
contra_comprobante = self.generar_comprobante(
talonario = talonario,
cliente = comprobante.comp_cliente,
total = comprobante.comp_total,
referencia = referencia,
comp_estado = comprobante.comp_estado,
comp_nro_letras = comprobante.comp_nro_letras,
comp_subtotal = comprobante.comp_subtotal,
comp_moneda = comprobante.comp_moneda.id,
#comp_nota_credito = comprobante.id
)
contra_comprobante.write({
'referencia_orig_ptv': comprobante.comp_talonario.tal_pto_vta,
'referencia_orig_numero': comprobante.comp_nro,
'referencia_orig_letra': comprobante.comp_talonario.tal_letra,
'referencia_orig_fact': comprobante.id,
})
contra_comprobante.comp_fecha = datetime.today()
#linea de NDEB
inter_prod = self.env['asw.producto'].search([('prod_descripcion','=','INTERES')])
linea_comp = self.env['asw.linea_comprobante'].create({
'lcp_producto': inter_prod.id,
'lcp_comprobante': contra_comprobante.id,
'lcp_precio': comprobante.comp_total,
'lcp_importe': comprobante.comp_total,
})
#contra_comprobante.validar()
return {
'name': "Nota de Débito",
'type': 'ir.actions.act_window',
'res_model': 'asw.comprobante',
'view_mode': 'form',
'view_type': 'form',
'res_id': contra_comprobante.id,
'target': 'new',
}
else:
raise UserError('No existe talonario para la Nota de Débito correspondiente. Créelo o diríjase a soporte para que lo haga, y vuelva a este menú')
<odoo>
<data>
<record id="asw_pago_cliente_wizzard_form" model="ir.ui.view">
<field name="name">Pago cliente Avanzado</field>
<field name="model">hgt.cobro_multiple</field>
<field name="arch" type="xml">
<form>
<h4>Nota 1: Si el monto a cobrar no llega a cubrir totalmente el saldo de las facturas elegidas, saldará completamente de la más vieja a la más nueva quedando la última con un saldo parcial.</h4>
<h4>Nota 2: Si el cobro excede a las facturas elegidas, el excedente se destinará automáticamente a saldar (total o parcialmente) a la factura con saldos pendientes más antigua en existencia.</h4>
<h4>Nota 3: Si el cobro excede a las facturas elegidas y no existen facturas con saldos pendientes, por fuera de las elegidas, el excedente quedará a favor del cliente en la cuenta corriente y podrá ser imputado a la primer factura nueva de forma automática.</h4>
<field name="pcw_cli_razon_social" invisible='1'/>
<group col="2">
<group col="2" >
<field name="pcw_cliente" colspan='2' domain="[('cli_es_cliente','=', True )]"/>
<field name="pcw_referencia" />
<field name="pcw_efectivo" colspan='2'/>
<field name="caja_efectivo"/>
</group>
<group string="Detalles" >
<field name="nota" nolabel="1"/>
</group>
</group>
<group col="4">
<!-- <field name="pcw_retencion_recibida" colspan="2"/>-->
<notebook colspan="4">
<page string="Cheques Recibidos">
<group col="4">
<field name="caja_cheque" colspan='4'/>
<field name="pcw_chq_resiv2" colspan='4' nolabel='1' widget='one2many' context="{'default_val_razon_social' : pcw_cli_razon_social}">
<tree create="1" delete="1" edit="1" editable="bottom">
<field name="che_banco"/>
<field name="che_nro_cheque"/>
<field name="che_fecha_emision" required='1'/>
<field name="che_fecha_cobro" required='1'/>
<field name="che_fecha_vencimiento" required='1'/>
<field name="che_razon_social_emisor"/>
<field name="che_cuit_emisor"/>
<field name="che_monto"/>
</tree>
</field>
</group>
</page>
<page string="Transferencias Recibidas">
<group col="4">
<field name="pcw_transferencias_recibidas" colspan='4' nolabel='1' widget='one2many' >
<tree create="1" delete="1" edit="1" editable="bottom">
<field name="val_cuenta_bancaria"/>
<field name="val_fecha_emision"/>
<field name="valor_caja_id"/>
<field name="val_nro_pago"/>
<field name="val_monto" required='1'/>
</tree>
</field>
</group>
</page>
<page string="Tarjetas">
<group col="4">
<field name="pcw_tarjetas" colspan='4' nolabel='1' widget='one2many' >
<tree create="1" delete="1" edit="1" editable="bottom">
<field name="val_tipo" domain="[('tv_tipo','=', 'ta' )]" string='Tarjeta' options="{'no_create': True, 'no_create_edit':True}"/>
<field name="val_nro_pago"/>
<field name="valor_caja_id"/>
<field name="val_monto" required='1'/>
</tree>
</field>
</group>
</page>
<page string="Retenciones">
<group col="4">
<field name="pcw_retenciones" colspan='4' nolabel='1' widget='one2many' >
<tree create="1" delete="1" edit="1" editable="bottom">
<field name="val_tipo" domain="[('tv_tipo','=', 'rr' )]" string='Retencion' options="{'no_create': True, 'no_create_edit':True}"/>
<field name="val_nro_pago"/>
<field name="val_monto" required='1'/>
</tree>
</field>
</group>
</page>
</notebook>
<br/>
</group>
<group id='total' col='6'>
<field name="pcw_total" colspan='2'/>
</group>
<footer>
<button name="generar_recibo" string="Generar Recibo" type="object" class="oe_highlight btn-generar-recibo"/>
<button special="cancel" string="Cancel"/>
</footer>
</form>
</field>
</record>
<act_window id="hgt_cobro_masivo_avanzado_wizzard_action" name="Cobro masivo Avanzado" src_model="asw.comprobante" res_model="hgt.cobro_multiple" view_mode="form" target="new" multi="True"/>
</data>
</odoo>
\ No newline at end of file
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data noupdate="0">
<record id="tpv_generar_nota_wizzard_view_form" model="ir.ui.view">
<field name="name">Generar Nota</field>
<field name="model">tpv.generar_nota</field>
<field name="arch" type="xml">
<form>
<group col='4'>
<h3> Elija qué desea generar
</h3>
</group>
<div style='text-align:center'>
<button type="object" style="margin:5px;" name="generar_notaDeb" string="Nota de Débito" class='btn btn-primary'/>
<button type="object" style="margin:5px;" name="generar_notaCred" string="Nota de Crédito" class='btn btn-primary'/>
</div>
<footer>
<button special='cancel' string="Cancelar"/>
</footer>
</form>
</field>
</record>
<!-- tpv.generar_nota action window -->
<record id="tpv_generar_nota_wizzard_action" model="ir.actions.act_window">
<field name="name">Generar Nota</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">tpv.generar_nota</field>
<field name="src_model">tpv.generar_nota</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="multi">True</field>
</record>
</data>
</odoo>
\ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!