compra_solicitud.py 4.63 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'

    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,
    )

    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:
                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,
                }
                nva_sol = self.env['hgt.compra_solicitudpresupuesto'].create(datos)

                nva_sol.csp_solicitudlinea = lineas_proov

            #modifica estado solicitud d compra
            self.cs_estados = 'pr'
            #marco como generada solicitud para desaparicion de botones
            self.cs_solicit_generada = True
            #devuelvo vista tree de solicitudes de presupuesto, NO ME SALIO, PQ NO SALE LA VISTA ORIGINAL Y NO SE PUEDE ENTRAR A LAS SOLICITUDES
            # return {
            #     'name': 'Solicitudes de Presupuesto',
            #     'view_type': 'form',
            #     'view_mode':'tree',
            #     'view_id': self.env.ref('hgt_compras.view_hgt_compra_solicitudpresupuesto_tree').id,
            #     'res_model':'hgt.compra_solicitudpresupuesto',
            #     'type':'ir.actions.act_window',
            #     'target':'current'
            # }
            return (True)
        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)