compra_solicitud.py 4.87 KB
from odoo import models, fields, api
from datetime import date, datetime
from odoo.exceptions import UserError

class hgt_compra_solicitud(models.Model):
    _name='hgt.compra_solicitud'
    _description='Solicitud de Compra'
    _rec_name='id'
    _order = 'id asc'

    name = fields.Char(
        string = u'Código Único',
        compute = 'compute_codigo_unico',
    )

    cs_linea_solicitud = fields.One2many(
        string = u'Línea de Solicitud',
        comodel_name = 'hgt.compra_solicitudlinea',
        inverse_name = 'csl_cs',
    )

    cs_solicitante = fields.Many2one(
        string =u'Solicitante',
        comodel_name ='res.users',
        default =  lambda self: self.env.user.id,
    )

    cs_referencia = fields.Char(
        string = u'Referencia',
    )

    cs_estados = fields.Selection(
        string = 'Estado',
        selection = [
            ('b', 'Borrador'),
            ('pe', 'Pendiente'),
            ('pr', 'Procesada'),
        ],
        store = True,
        default= 'b',
        readonly = True,
    )

    cs_fecha_creacion = fields.Date(
        string = u'Fecha Creación',
        default = str(date.today())
    )

    cs_fecha_limite = fields.Date(
        string = u'Fecha Límite',
    ) 

    cs_texto = fields.Char(
        string='Seguimiento', 
        default=''
    )

    cs_notitas = fields.Text(
        string='Seguimiento', 
        default=''
    )

    cs_solicit_generada = fields.Boolean(
        string="Solicitud generada?",
        default=False,
    )

    # cs_solicitudpre = fields.Many2many(
    #     string="Solicitudes de Presupuesto asociadas",
    #     comodel_name = "hgt.compra_solicitudpresupuesto",
    # )

    def compute_codigo_unico(self):
        for record in self:
            txt = str(record.id)
            x = txt.zfill(6)
            record.name = x

    def CargarNotas(self):
        if (self.cs_texto == "") or (self.cs_texto == False):
            return(True)
        Texto = """{} - {}: {} \n{}""".format(self.env.user.display_name,
        datetime.now().strftime('%Y-%m-%d %H:%M'),
        self.cs_texto, self.cs_notitas)
        self.cs_notitas = Texto
        self.cs_texto = ""
        return(True)
        
    def aprobar(self):
        self.cs_linea_solicitud.aprobar()
        return (True)

    def rechazar(self):
        self.cs_linea_solicitud.rechazar()
        return (True)

    def generar_solicitud_p(self):
        lineas = []
        lineas_proov = []
        lineas = self.cs_linea_solicitud.filtered(lambda t: t.csl_select == True)
        if lineas:
            #agrupo lineas segun proovedor para armar solicitudes distintas por proovedor
            agrupado = lineas.read_group([('csl_cs','=', self.id)],fields=['csl_proovedor_propuesto'], groupby=['csl_proovedor_propuesto'])
            for lin in agrupado:
                if lin['csl_proovedor_propuesto']:
                    proov = lin['csl_proovedor_propuesto']
                    proov = proov[0]
                    lineas_proov = self.env['hgt.compra_solicitudlinea'].search([('csl_proovedor_propuesto','=', proov),('csl_cs','=',self.id),('csl_select','=',True)]).ids
                    datos = {
                        'csp_solicitante': self.cs_solicitante.id,
                        'csp_proovedorp': proov,
                        'csp_compra_solicitud': self.id,
                    }
                    nva_sol = self.env['hgt.compra_solicitudpresupuesto'].create(datos)

                    nva_sol.csp_solicitudlinea = lineas_proov
                else:
                    raise UserError('Debe proponer proovedores para cada línea de solicitud')
            #modifica estado solicitud d compra
            self.cs_estados = 'pr'
            #marco como generada solicitud para desaparicion de botones
            self.cs_solicit_generada = True
            #devuelve solicitud
            return {
                'type': 'ir.actions.act_window',
                'res_model': 'hgt.compra_solicitudpresupuesto',
                'view_mode': 'form',
                'view_type': 'form',
                'res_id': nva_sol.id,
                'views': [(False, 'form')],
                'target': 'current',
            }
        else:
            raise UserError('No hay líneas de solicitud seleccionadas para generar la solicitud de Presupuesto')

    def aprobar_solicitud(self):
        lineas = self.cs_linea_solicitud
        for lin in lineas:
            if lin.csl_estados == 'pe':
                raise UserError('Debe Aprobar o Rechazar todas las líneas de solicitud')
        self.cs_estados = 'pr'
        return (True)
        
    def generar_orden_c(self):
        self.cs_estados = 'pr'
        return (True)
    
    def procesar_solicitud(self):
        self.cs_estados = 'pe'

    def seleccionar_todo(self):
        for lin in self.cs_linea_solicitud:
            if lin.csl_estados in ['pr']:
                lin.csl_select = True
        return (True)