Commit 8523d4b7 by Maria Agustina

1482

1 parent 6653c0fa
...@@ -30,9 +30,11 @@ ...@@ -30,9 +30,11 @@
# always loaded # always loaded
'data': [ 'data': [
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'views/compra_orden.xml', 'security/permisos.xml',
'views/compra_solicitud.xml', 'views/compra_solicitud.xml',
'views/compra_solicitudpresupuesto.xml', 'views/compra_solicitudpresupuesto.xml',
'wizard/crear_solicitudp.xml',
'views/compra_orden.xml',
'views/menu.xml', 'views/menu.xml',
], ],
# only loaded in demonstration mode # only loaded in demonstration mode
......
from . import compra_orden
from . import compra_solicitud from . import compra_solicitud
from . import compra_solicitudlinea from . import compra_solicitudlinea
from . import compra_solicitudpresupuesto from . import compra_solicitudpresupuesto
from . import compra_orden
...@@ -13,7 +13,34 @@ class hgt_compra_orden(models.Model): ...@@ -13,7 +13,34 @@ class hgt_compra_orden(models.Model):
selection = [ selection = [
('b', 'Borrador'), ('b', 'Borrador'),
('a', 'Aprobada'), ('a', 'Aprobada'),
('r', 'Rechazada'),
('e', 'Enviada'), ('e', 'Enviada'),
], ],
store = True store = True,
default = 'b',
) )
cor_linea_solicitud = fields.One2many(
string = u'Línea de Solicitud',
comodel_name = 'hgt.compra_solicitudlinea',
inverse_name = 'csl_co',
)
cor_sp = fields.Many2one(
string = u'Solicitud de Presupuesto',
comodel_name = 'hgt.compra_solicitudpresupuesto',
)
def rechazar_orden(self):
self.cor_sp.orden_rechazada()
self.cor_estados = 'r'
return (True)
def aprobar_orden(self):
self.cor_estados = 'a'
return (True)
def enviar_orden(self):
self.cor_estados = 'e'
return (True)
\ No newline at end of file \ No newline at end of file
from odoo import models, fields, api from odoo import models, fields, api
from datetime import date, datetime from datetime import date, datetime
from odoo.exceptions import UserError
class hgt_compra_solicitud(models.Model): class hgt_compra_solicitud(models.Model):
_name='hgt.compra_solicitud' _name='hgt.compra_solicitud'
...@@ -32,11 +33,14 @@ class hgt_compra_solicitud(models.Model): ...@@ -32,11 +33,14 @@ class hgt_compra_solicitud(models.Model):
('pe', 'Pendiente'), ('pe', 'Pendiente'),
('pr', 'Procesada'), ('pr', 'Procesada'),
], ],
store = True store = True,
default= 'b',
readonly = True,
) )
cs_fecha_creacion = fields.Date( cs_fecha_creacion = fields.Date(
string = u'Fecha Creación', string = u'Fecha Creación',
default = str(date.today())
) )
cs_fecha_limite = fields.Date( cs_fecha_limite = fields.Date(
...@@ -53,6 +57,11 @@ class hgt_compra_solicitud(models.Model): ...@@ -53,6 +57,11 @@ class hgt_compra_solicitud(models.Model):
default='' default=''
) )
cs_solicit_generada = fields.Boolean(
string="Solicitud generada?",
default=False,
)
def CargarNotas(self): def CargarNotas(self):
if (self.cs_texto == "") or (self.cs_texto == False): if (self.cs_texto == "") or (self.cs_texto == False):
return(True) return(True)
...@@ -62,3 +71,69 @@ class hgt_compra_solicitud(models.Model): ...@@ -62,3 +71,69 @@ class hgt_compra_solicitud(models.Model):
self.cs_notitas = Texto self.cs_notitas = Texto
self.cs_texto = "" self.cs_texto = ""
return(True) 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)
...@@ -17,6 +17,11 @@ class hgt_compra_solicitudlinea(models.Model): ...@@ -17,6 +17,11 @@ class hgt_compra_solicitudlinea(models.Model):
comodel_name = 'hgt.compra_solicitud', comodel_name = 'hgt.compra_solicitud',
) )
csl_co = fields.Many2one(
string = u'Orden de Compra',
comodel_name = 'hgt.compra_orden',
)
csl_solicitante = fields.Many2one( csl_solicitante = fields.Many2one(
string =u'Solicitante', string =u'Solicitante',
comodel_name ='res.users', comodel_name ='res.users',
...@@ -30,7 +35,9 @@ class hgt_compra_solicitudlinea(models.Model): ...@@ -30,7 +35,9 @@ class hgt_compra_solicitudlinea(models.Model):
('pe', 'Pendiente'), ('pe', 'Pendiente'),
('pr', 'Procesada'), ('pr', 'Procesada'),
], ],
store = True store = True,
default='pe',
readonly= True,
) )
csl_proovedor_propuesto = fields.Many2one ( csl_proovedor_propuesto = fields.Many2one (
...@@ -48,6 +55,15 @@ class hgt_compra_solicitudlinea(models.Model): ...@@ -48,6 +55,15 @@ class hgt_compra_solicitudlinea(models.Model):
default='' default=''
) )
csl_select = fields.Boolean(
string="Seleccionar",
default=False,
)
csl_cs_estados = fields.Selection(
related = 'csl_cs.cs_estados',
)
def CargarNotas(self): def CargarNotas(self):
if (self.csl_texto == "") or (self.csl_texto == False): if (self.csl_texto == "") or (self.csl_texto == False):
return(True) return(True)
...@@ -57,3 +73,11 @@ class hgt_compra_solicitudlinea(models.Model): ...@@ -57,3 +73,11 @@ class hgt_compra_solicitudlinea(models.Model):
self.csl_notitas = Texto self.csl_notitas = Texto
self.csl_texto = "" self.csl_texto = ""
return(True) return(True)
def aprobar(self):
self.csl_estados = 'pr'
return (True)
def rechazar(self):
self.csl_estados = 'r'
return (True)
\ No newline at end of file \ No newline at end of file
from odoo import models, fields, api from odoo import models, fields, api
from odoo.exceptions import UserError
class hgt_compra_solicitudpresupuesto(models.Model): class hgt_compra_solicitudpresupuesto(models.Model):
_name='hgt.compra_solicitudpresupuesto' _name='hgt.compra_solicitudpresupuesto'
_order = 'id asc'
csp_solicitante = fields.Many2one( csp_solicitante = fields.Many2one(
string =u'Solicitante', string =u'Solicitante',
comodel_name ='res.users', comodel_name ='res.users',
default = lambda self: self.env.user.id,
) )
csp_proovedorp= fields.Many2one ( csp_proovedorp= fields.Many2one (
...@@ -27,3 +28,55 @@ class hgt_compra_solicitudpresupuesto(models.Model): ...@@ -27,3 +28,55 @@ class hgt_compra_solicitudpresupuesto(models.Model):
string='Archivos Adjuntos' string='Archivos Adjuntos'
) )
csp_estados = fields.Selection(
string = 'Estado',
selection = [
('pe', 'Pendiente'),
('e', 'Enviado al Proovedor'),
('a', 'Presupuesto Aprobado'),
('r', 'Presupuesto Rechazado'),
],
store = True,
default= 'pe',
readonly = True,
)
csp_orden_generada = fields.Boolean(
string="Orden generada?",
default=False,
)
def enviar_pdf(self):
self.csp_estados = 'e'
#aca meter el qreport p obtener PDF
def chequear_ajuntos(self):
if not self.csp_adjuntos:
raise UserError("Debe haber algún presupuesto cargado en adjuntos para poder aceptarlo o rechazarlo")
def aceptar_presup(self):
self.chequear_ajuntos()
self.csp_estados = 'a'
def rechazar_presup(self):
self.chequear_ajuntos()
self.csp_estados = 'r'
def generar_sc(self):
lista = []
datos = {'cor_comprador': self.csp_solicitante.id,
'cor_sp': self.id}
nva_orden = self.env['hgt.compra_orden'].create(datos)
for lin in self.csp_solicitudlinea:
lista.append(lin.id)
nva_orden.cor_linea_solicitud = lista
self.csp_orden_generada = True
return (True)
def orden_rechazada(self):
self.csp_orden_generada = False
return (True)
<odoo>
<data>
<record model="ir.module.category" id="module_category_hgt_compras">
<field name="name">Gestión de compras</field>
<field name="description">Gestión de compras</field>
</record>
<record model="res.groups" id="module_category_hgt_gestor_compras">
<field name="name">Gestor de Compras</field>
<field name="category_id" eval="ref('module_category_hgt_compras')"/>
</record>
</data>
</odoo>
\ No newline at end of file \ No newline at end of file
...@@ -40,10 +40,26 @@ ...@@ -40,10 +40,26 @@
<form> <form>
<header> <header>
<field name="cor_estados" widget="statusbar"/> <field name="cor_estados" widget="statusbar"/>
<button name="rechazar_orden" string="Rechazar Orden" type="object" class="btn btn-danger" attrs="{'invisible':[('cor_estados','in',['r','a','e'])]}"/>
<button name="aprobar_orden" string="Aprobar Orden" type="object" class="btn btn-success" attrs="{'invisible':[('cor_estados','in',['r','a','e'])]}"/>
<button name="enviar_orden" string="Enviar Orden" type="object" class="btn btn-info" attrs="{'invisible':[('cor_estados','not in',['a'])]}"/>
</header> </header>
<group string="Órden de Compra" col="2"> <group string="Órden de Compra" col="2">
<field colspan="1" name="cor_comprador" /> <field colspan="1" name="cor_comprador" attrs="{'readonly':[('cor_estados','not in',['b'])]}" />
</group> </group>
<notebook colspan="4">
<page string="Líneas de solicitud">
<field nolabel="1" name="cor_linea_solicitud" readonly="1">
<tree create="0" edit="0" editable="0">
<field name="name" readonly="1" />
<field name="csl_descripcion" />
<field name="csl_solicitante"/>
<field name="csl_estados" />
<field name="csl_proovedor_propuesto"/>
</tree>
</field>
</page>
</notebook>
</form> </form>
</field> </field>
</record> </record>
......
...@@ -45,23 +45,34 @@ ...@@ -45,23 +45,34 @@
<!--<sheet>--> <!--<sheet>-->
<header> <header>
<field name="cs_estados" widget="statusbar"/> <field name="cs_estados" widget="statusbar"/>
<button name="procesar_solicitud" string="Enviar a Aprobación" type="object" class="btn btn-success" attrs="{'invisible':[('cs_estados','not in',['b'])]}"/>
<button name="aprobar_solicitud" string="Procesar" type="object" class="btn btn-success" attrs="{'invisible':[('cs_estados','in',['b','pr'])]}" groups="hgt_compras.module_category_hgt_gestor_compras"/>
<button name="generar_solicitud_p" string="Generar Solicitud/es de Presupuesto" type="object" class="oe_highlight" attrs="{'invisible':['|',('cs_estados','in',['b','pe']),('cs_solicit_generada','=',True)]}" />
<!-- <button name="generar_orden_c" string="Generar Orden de Compra" type="object" class="oe_highlight" attrs="{'invisible':[('cs_estados','in',['b','pe'])]}" /> -->
</header> </header>
<group col="4" string="Datos Solicitud"> <group col="4" string="Datos Solicitud">
<h3><field nolabel="1" colspan="4" readonly="1" name="name"/></h3> <h3><field nolabel="1" colspan="4" readonly="1" name="name"/></h3>
<field colspan="4" name="cs_solicitante" /> <field colspan="4" name="cs_solicitante" attrs="{'readonly':[('cs_estados','not in',['b'])]}" />
<field colspan="4" name="cs_referencia" /> <field colspan="4" name="cs_referencia" attrs="{'readonly':[('cs_estados','not in',['b'])]}" />
<field colspan="2" name="cs_fecha_creacion" /> <field colspan="2" name="cs_fecha_creacion" attrs="{'readonly':[('cs_estados','not in',['b'])]}" />
<field colspan="2" name="cs_fecha_limite" /> <field colspan="2" name="cs_fecha_limite" attrs="{'readonly':[('cs_estados','not in',['b'])]}" />
<field name="cs_solicit_generada" invisible="1" />
</group> </group>
<notebook colspan="4"> <notebook colspan="4">
<page string="Líneas de Solicitud"> <page string="Líneas de Solicitud">
<button type="object" class="btn btn-info" style="margin:5px;" name="seleccionar_todo" string="Seleccionar todo" attrs="{'invisible':[('cs_estados','in',['b','pe'])]}" />
<field nolabel="1" name="cs_linea_solicitud"> <field nolabel="1" name="cs_linea_solicitud">
<tree create="1" edit="1" editable="1"> <tree create="1" edit="1" editable="1">
<field name="name" readonly="1" /> <field name="name" readonly="1" />
<field name="csl_descripcion" /> <field name="csl_descripcion" attrs="{'readonly':[('csl_cs_estados','not in',['b'])]}"/>
<field name="csl_solicitante"/> <field name="csl_solicitante" attrs="{'readonly':[('csl_cs_estados','not in',['b'])]}"/>
<field name="csl_estados" /> <field name="csl_estados" readonly="1"/>
<field name="csl_proovedor_propuesto"/> <field name="csl_cs_estados" invisible="1"/>
<field name="csl_proovedor_propuesto" attrs="{'readonly':[('csl_cs_estados','not in',['b'])]}"/>
<button type="object" class="btn btn-primary" name="aprobar" string="Aprobar" groups="hgt_compras.module_category_hgt_gestor_compras" attrs="{'invisible':[('csl_cs_estados','not in',['pe'])]}" />
<button type="object" class="btn btn-primary" name="rechazar" string="Rechazar" groups="hgt_compras.module_category_hgt_gestor_compras" attrs="{'invisible':[('csl_cs_estados','not in',['pe'])]}" />
<field name="csl_select" attrs="{'invisible':[('csl_estados','in',['pe','r'])]}"/>
</tree> </tree>
</field> </field>
</page> </page>
......
...@@ -40,14 +40,20 @@ ...@@ -40,14 +40,20 @@
<form> <form>
<!--<sheet>--> <!--<sheet>-->
<header> <header>
<field name="csp_orden_generada" invisible="1"/>
<field name="csp_estados" widget="statusbar"/>
<button name="enviar_pdf" string="Imprimir PDF para Proovedor" type="object" class="btn btn-primary" attrs="{'invisible':[('csp_estados','not in',['pe'])]}"/>
<button name="aceptar_presup" string="Aceptar Presupuesto" type="object" class="btn btn-success" attrs="{'invisible':[('csp_estados','not in',['e'])]}"/>
<button name="rechazar_presup" string="Rechazar Presupuesto" type="object" class="btn btn-danger" attrs="{'invisible':[('csp_estados','not in',['e'])]}"/>
<button name="generar_sc" string="Generar Orden de Compra" type="object" class="btn btn-info" attrs="{'invisible':['|',('csp_estados','not in',['a']),('csp_orden_generada','=',True)]}"/>
</header> </header>
<group col="4"> <group col="4">
<field name="csp_solicitante" /> <field name="csp_solicitante" attrs="{'readonly':[('csp_estados','not in',['pe'])]}"/>
<field name="csp_proovedorp" /> <field name="csp_proovedorp" attrs="{'readonly':[('csp_estados','not in',['pe'])]}"/>
</group> </group>
<notebook colspan="4"> <notebook colspan="4">
<page string="A presupuestar"> <page string="A presupuestar">
<field nolabel="1" name="csp_solicitudlinea"> <field nolabel="1" name="csp_solicitudlinea" attrs="{'readonly':[('csp_estados','not in',['pe'])]}">
<tree create="1" edit="1" editable="1"> <tree create="1" edit="1" editable="1">
<field name="name" readonly="1" /> <field name="name" readonly="1" />
<field name="csl_descripcion" /> <field name="csl_descripcion" />
...@@ -58,7 +64,7 @@ ...@@ -58,7 +64,7 @@
</field> </field>
</page> </page>
<page string="Adjuntos"> <page string="Adjuntos">
<field name="csp_adjuntos" required="0" nolabel="1" > <field name="csp_adjuntos" required="0" nolabel="1" attrs="{'readonly':[('csp_estados','not in',['pe','e'])]}">
<tree create="1" edit="1" editable="1"> <tree create="1" edit="1" editable="1">
<field name="file" filename="file_name" editable="1" /> <field name="file" filename="file_name" editable="1" />
<field name="file_name" /> <field name="file_name" />
......
from . import crear_solicitudp
No preview for this file type
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class hgt_solicitarp(models.TransientModel):
_name = "hgt.solicitarp"
wiz_lineasol = fields.Many2one (
string =u'Linea de solicitud',
comodel_name ='hgt.compra_solicitudlinea',
)
wiz_proovedor= fields.Many2one (
string =u'Proovedor',
comodel_name ='hgt.instituciones',
)
def procesar_solicitudp(self):
return (True)
\ No newline at end of file \ No newline at end of file
<odoo>
<data>
<record id="view_form_solicitar_p_ui" model="ir.ui.view">
<field name="name">Solicitar Presupuesto</field>
<field name="model">hgt.solicitarp</field>
<field name="arch" type="xml">
<form>
<group string="Seleccionar proovedor">
<field name="wiz_proovedor"/>
</group>
<footer>
<button name="procesar_solicitudp" type="object" string="Generar" class="btn-default" special="cancel"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
<act_window id="hgt_solicitar_p_action"
name="Solicitar Presupuesto"
src_model="hgt.solicitarp"
res_model="hgt.solicitarp"
view_mode="form"
target="new"
multi="True"/>
</data>
</odoo>
\ No newline at end of file \ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!