compra_solicitud.py
4.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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,
)
# 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)