conciliaciones.py 3.7 KB
# -*- coding: utf-8 -*-
###############################################################################
#    License, author and contributors information in:                         #
#    __manifest__.py file at the root folder of this module.                  #
###############################################################################

from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError, Warning
import datetime

class tpv_conciliacion(models.Model):
    _name = 'tpv_c.conciliacion'
    _description = 'Conciliacion de Cuenta Corriente CUIT'

    name = fields.Char(string='Titulo')

    notas = fields.Text(string='Notas')

    fecha = fields.Date(string='Fecha')

    estado = fields.Selection(
        string='Estado', 
        selection=[
            ('b', 'Borrador'), 
            ('p', 'Conciliado'),
            ],
        required=True,
        default="b"
        )

    cuit = fields.Many2one(
        comodel_name='asw.cliente', 
        string='Cuit')

    facturas = fields.Many2many(
        comodel_name='asw.comprobante', 
        string='Duedas de cliete y resivos propios',
        relation = 'tpv_correcciones_conciliaciones_facturas2',
        column1 = 'conciliacion_id',
        column2 = 'factura_id'
        )

    resivos = fields.Many2many(
        comodel_name='asw.comprobante', 
        string='Resivos de cliente y facturas de proveedor',
        relation = 'tpv_correcciones_conciliaciones_resivos2',
        column1 = 'conciliacion_id',
        column2 = 'resivos_id'
        )

    def Reinicio(self):
        for Id in self.facturas.ids:
            self.facturas = [3,Id]

        self.resivos = []
    
    def TraerConfiguracion(self):
        if self.cuit.id == False:
            raise Warning("Debe seleccionar un cuit antes de proseguir")
        config = self.env["tpv_c.conciliacion_config"].search([])
        if len(config) != 1:
            raise Warning("Debe haber exactamente una configuracion de conciliacion borre la que no corresponda si hay mas de una o creela si no hay, si no puede hacerlo contacte a soporte")
        return config

    def BuscarComprobantes(self):
        self.BusquedaDeuda()
        self.BusquedaResivos()
        
    def BusquedaDeuda(self):
        config = self.TraerConfiguracion()
        estado = ["comp_estado","not in",["c","b"]]
        domain_deuda = ["&","&",
            ["comp_talonario","in",config.facturas.ids],
            ["comp_cliente","=",self.cuit.id],
            estado
        ]
        deudas = self.env["asw.comprobante"].search(domain_deuda)
        DeudaIds = []
        for deuda in deudas:
            if deuda.comp_adeudado != 0:
                DeudaIds.append(deuda.id)
        if len(DeudaIds) != 0:
            self.write({'facturas': [(6, 0, DeudaIds)]})
        else:
            self.write({'facturas': [(6, 0, [])]})

    def BusquedaResivos(self):
        config = self.TraerConfiguracion()
        estado = ["comp_estado","not in",["c","b"]]
        domain_deuda = ["&","&",
            ["comp_talonario","in",config.resivos.ids],
            ["comp_cliente","=",self.cuit.id],
            estado
        ]
        deudas = self.env["asw.comprobante"].search(domain_deuda)
        DeudaIds = []
        for deuda in deudas:
            if deuda.comp_adeudado != 0:
                DeudaIds.append(deuda.id)
        if len(DeudaIds) != 0:
            self.write({'resivos': [(6, 0, DeudaIds)]})
        else:
            self.write({'resivos': [(6, 0, [])]})


    def Conciliar(self):
        config = self.TraerConfiguracion()
        if (self.resivos.ids == []) or (self.facturas.ids == []):
            raise Warning("O no hay comprobante o no hay resivos para conciliar")