solicitudes.py 6.09 KB
# -*- coding: utf-8 -*-
from odoo.exceptions import UserError, ValidationError, Warning
from datetime import datetime, timedelta
from odoo import models, fields, api
import random, string, time

AVAILABLE_PRIORITIES = [
    ('0', 'Baja'),
    ('1', 'Normal'),
    ('2', 'Alta'),
    ('3', 'Crítico'),
]
usuario = {
    'name':"userAPI9", 
    'login':'userapi9@gmail.com',
    'company_ids':[1], 
    'company_id':1, 
    'new_password':'123456',
}
class lappasolicitudes(models.Model):
    _name = "lappa.solicitudes"
    _order = "id desc"

    name = fields.Char(
        string="Servicio",
        compute="_compute_name",
        store=True,
        readonly=True
    )

    inicio = fields.Datetime("Creación",
        default=lambda *a: datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

    fecha = fields.Date(string='Fecha',
        default=lambda *a: datetime.now().strftime('%Y-%m-%d'))

    nombre = fields.Char(string='Solicitante')

    celular = fields.Char(string='Telefono solicitante')

    email = fields.Char(string='Email')

    localidad = fields.Integer(string='Localidad')

    cuit = fields.Char(string='Cuit/Documento')

    estado = fields.Selection(string='Estado', selection=[
        ('a_revisar', 'Sin Revisar'), 
        ('revision', 'En Revision'),
        ('aceptado', 'Aceptado'),
        ('rechazado', 'Rechazado'),
        ],
        default="a_revisar",
        required=True)

    transportista = fields.Many2one(comodel_name='trans.transportista',
        string='Transportista al que se relacionara',
        help="Si se deja basio generara un nuevo transportista con el nombre de este formulario")

    seguro = False

    @api.depends('nombre')
    def _compute_name(self):
        for record in self:
            name = """SOLICITUD {} - {} - {}"""
            name = name.format(str(record.id).zfill(5), record.nombre, record.fecha)
            record.name = name

    notitas = fields.Text(string='Seguimiento', default='')
    texto = fields.Char(string='Seguimiento', default='')

    @api.onchange('texto')
    def _onchange_texto(self):
        if (self.texto == "") or (self.texto == False):
            return({})
        Texto = """{} - {}: {} \n{}""".format(self.env.user.display_name,
        (datetime.now() - timedelta(hours=3)).strftime('%Y-%m-%d %H:%M'),
        self.texto, self.notitas)
        self.notitas = Texto
        modelo = self.env["lappa.solicitudes"].browse(self._origin.id)
        modelo.write({"notitas": Texto})
        self.texto = ""
        return({})

    def Revisar(self):
        Texto = """{} - {}: {} \n{}""".format(self.env.user.display_name,
        (datetime.now() - timedelta(hours=3)).strftime('%Y-%m-%d %H:%M'),
        "Se pasa a revisar", self.notitas)
        self.notitas = Texto
        self.estado = "revision"
    
    def Rechazar(self):
        Texto = """{} - {}: {} \n{}""".format(self.env.user.display_name,
        (datetime.now() - timedelta(hours=3)).strftime('%Y-%m-%d %H:%M'),
        "Se rechaza solicitud", self.notitas)
        self.notitas = Texto
        self.estado = "rechazado"

    def AceptarNuevo(self):
        Texto = """{} - {}: {} \n{}""".format(self.env.user.display_name,
        (datetime.now() - timedelta(hours=3)).strftime('%Y-%m-%d %H:%M'),
        "Se Acepta y se genera trasnportista nuevo", self.notitas)
        self.notitas = Texto
        self.estado = "aceptado"

    def AceptarRelacionar(self):
        if len(self.transportista) == 0:
            raise Warning("No se a seleccionado con que transportista se relacionara seleccionelo y luego presione este boton")
        self.GenerarNuevoUsuario()
        Texto = """{} - {}: {} \n{}""".format(self.env.user.display_name,
        (datetime.now() - timedelta(hours=3)).strftime('%Y-%m-%d %H:%M'),
        "Se Acepta y se relaciona a un transportista existente", self.notitas)
        self.notitas = Texto
        self.estado = "aceptado"


    def GenerarNuevoUsuario(self):
        pw = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
        usuario["new_password"] = pw
        users = self.env["res.users"]
        test = users.search(["|",["login","=",self.email ],["CelularRecuperacion","=",self.celular]])
        if len(test) > 0:
            raise Warning("Ya hay un usuario con este login, por favor chequee si  ya no lo creo o si esta bien escrito, el mail/login y el telefono deben ser unicos >> " +  test[0].display_name + " " + test[0].login +" " + str(test[0].CelularRecuperacion))
        usuario["name"] = self.nombre
        usuario["CelularRecuperacion"] = self.celular
        usuario["login"] = self.email
        self.env.cr.commit()
        self.AltaUsuarioNotificacion(usuario)
        raise Warning(str(usuario))


    def AltaUsuarioNotificacion(self,usuario): 
        TextoAlta = """Se a confirmado el alta de su susuario en 
https://lappa.ar 
usuario = {USUARIO}
contraseña = {PASS}
celular = {CEL}"""
        TextoAlta = TextoAlta.replace("{USUARIO}",usuario["login"])
        TextoAlta = TextoAlta.replace("{PASS}",usuario["new_password"])
        TextoAlta = TextoAlta.replace("{CEL}",usuario["CelularRecuperacion"])
        try:
            self.enviar_mensaje(tipo="Mail",mensaje=TextoAlta,email=usuario["login"],titulo="Confirmacion de usuario")
        except:
            pass
        try:
            self.enviar_mensaje(mensaje=TextoAlta,telefono=usuario["CelularRecuperacion"],titulo="Confirmacion de usuario")
        except:
            pass

    def enviar_mensaje(self, tipo='Whatsapp', mensaje="mensaje", titulo="Titulo",email="",telefono=""):#Crea mensaje y lo envia
            #Hay que agregar al modelo la relacion con los mensajes para tener trazavilidad
            identidad = self.env["asw.token"].sudo().search([])[0]
            #identidad = self.http.env["asw.token"].sudo().search([])[0]
            vals = {"mensaje_nombre":titulo,
            "mensaje_descripcion":mensaje,
            "mensaje_numero_whatsapp":telefono,
            "mensaje_direccion_mail":email,
            "identidad":identidad.id}
            #print(vals)
            mensaje = self.env['asw.mensaje'].sudo().create(vals)
            mensaje.tipo = tipo
            mensaje.enviar()