liquidacionestareas.py 4.45 KB
# -*- coding: utf-8 -*-

from odoo import models, fields, api
from datetime import datetime
from odoo.exceptions import UserError
#from lib.config import config
DEFAULT_SERVER_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
DEFAULT_SERVER_TIME_FORMAT = "%H:%M:%S"
DEFAULT_SERVER_DATETIME_FORMAT = "%s %s" % (
        DEFAULT_SERVER_DATE_FORMAT,
        DEFAULT_SERVER_TIME_FORMAT)


class hdgt_liquidacionestareas(models.Model):
    _name = 'hgt.liquidacionestareas'

    nombre = fields.Char(
        string='Nombre',
        compute='obtener_nombre',
    )

    usuario = fields.Many2one(
        string='Usuario',
        comodel_name='res.users',
        ondelete='restrict',
    )
    
    lineas_tareas = fields.One2many(
        string='Tareas',
        comodel_name='hgt.linea_tarea',
        inverse_name='liquidaciones',
    )

    desde = fields.Date(
        string='Desde',
   
    )

    hasta = fields.Date(
        string='Hasta',
  
    )

    total_aprobado = fields.Float(
        string='Total Aprobado',
        readonly = True,
    )
    
    aprobado = fields.Boolean(
        string='Aprobado?',
        readonly= True,
    )

    fecha_aprobado = fields.Datetime(
        string= "Fecha Aprobado",
    )

    aprobador = fields.Many2one(
        string='Aprobador',
        comodel_name='res.users',
    )

    
    total = fields.Float(
        string='Total Abonado',
        readonly = True,
    )
    
    abonado = fields.Boolean(
        string='Abonado?',
        readonly= True,
    )

    fecha_abonado = fields.Datetime(
        string= "Fecha Abonado",
    )

    abonador = fields.Many2one(
        string='Abonador',
        comodel_name='res.users',
    )
    
    estado = fields.Selection(
        string='Estado',
        selection=[('borrador', 'Borrador'), ('aprobado', 'Aprobado'), ('liquidado', 'Liquidado')],
        default='borrador',
    )

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

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

    def CargarNotas(self):
        if (self.lt_texto == "") or (self.lt_texto == False):
            return(True)
        Texto = """{} - {}: {} \n{}""".format(self.env.user.display_name,
        datetime.now().strftime('%Y-%m-%d %H:%M'),
        self.lt_texto, self.lt_notitas)
        self.lt_notitas = Texto
        self.lt_texto = ""
        return(True)
    
    def obtener_nombre(self):
        for record in self:
            fecha = record.hasta
            usuario = record.usuario.name
            string = "{} - {}".format(fecha,usuario)
            record.nombre = string 

    def crear_linea(self,liquidacion,usuario,desde,hasta):
        desde1 = "{} 00:00:01".format(desde)
        hasta1 = "{} 23:59:59".format(hasta)
        #import ipdb; ipdb.set_trace()
        tareas = self.env['hgt.tarea'].search([('ejecutor','=',usuario),('write_date', '>', desde1),('write_date', '<', hasta1)])
        
        for tarea in tareas.ids:             
            nva_lin = self.env['hgt.linea_tarea'].create({
            'tarea': tarea,
            'liquidaciones':liquidacion,
            'inicio': desde,
            'cierre': hasta,
            })
            nva_lin.computar_minutos_a_liquidar()
        
        return len(tareas)

    def obtener_total(self):
        tot = 0
        for record in self.lineas_tareas:
            tot = tot + record.subtotal
        return(tot)

    def aprobar_liquidaciones(self):
        self.total_aprobado = self.obtener_total()
        self.aprobado = True
        self.fecha_aprobado = datetime.now()
        self.aprobador = self.env.user.id
        self.estado = 'aprobado'
        

    def abonar_liquidaciones(self):
        self.total = self.obtener_total()
        self.fecha_abonado = datetime.now() 
        self.abonador = self.env.user.id
        for tar in self.lineas_tareas:
            if tar.minutos_a_liquidar > 0:
                if tar.tarea.liquidado == False:
                    tar.tarea.horas_liquidadas = tar.minutos_reales
                    tar.tarea.liquidado = True
                else:
                    tar.tarea.horas_liquidadas += tar.minutos_a_liquidar
        self.estado = 'liquidado'
        self.abonado = True
        return(True)

    def volver_borrador(self):
        self.estado = 'borrador'
        self.abonado = False
        for tar in self.lineas_tareas:
            tar.tarea.horas_liquidadas = tar.tarea.horas_liquidadas - tar.minutos_reales
            tar.tarea.liquidado = False