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

from odoo import models, fields, api
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 = fields.Float(
        string='Total',
        compute="obtener_total",
    )
    
    abonado = fields.Boolean(
        string='Abonado?',
    )
    
    estado = fields.Selection(
        string='Estado',
        selection=[('borrador', 'Borrador'), ('aprobado', 'Aprobado'), ('liquidado', 'Liquidado')],
        default='borrador',
    )

    reporte_ejecutor = fields.Many2one(
        string=u'Ejecutó',
        comodel_name='res.users',
        default=lambda self: self.env.user
    )

    reporte_fecha = fields.Datetime(
        string='field_name',
        default=fields.Datetime.now,
    )
    
    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)])
        puesto = self.env['hgt.tipo_cargo'].search([('ejecutores','=',usuario)], limit=1)

        for tarea in tareas.ids:             
            nva_lin = self.env['hgt.linea_tarea'].create({
            'tarea': tarea,
            'liquidaciones':liquidacion,
            'inicio': desde,
            'cierre': hasta,
            'tipo_cargo': puesto.id,
            })
        
        return len(tareas)

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

    def aprobar_liquidaciones(self):
        self.estado = 'aprobado'
        

    def abonar_liquidaciones(self):
        self.estado = 'liquidado'
        self.abonado = True
        for tar in self.lineas_tareas:
            if (tar.tarea.liquidado == False) :
                tar.tarea.horas_liquidadas = tar.minutos_reales
                tar.tarea.liquidado = True
            else:
                raise UserError('Alguna de estas tareas ya fue liquidada previamente')

    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

    def imprimir_liquidaciones(self):
        obj = self.env.ref('hgt_liquidacion_tareas.reporte_liquidaciones').report_action(self)
        return obj

    def ver_liquidacion(self):
        return {
            'type': 'ir.actions.act_window',
            'name': 'Liquidaciones', 
            'view_type': 'form',
            'view_mode': 'form',
            'res_model': 'hgt.liquidacionestareas',
            'res_id': self.id,
            'target': 'current',
        }