Asignación de Seriales en Albaranes de Clientes. Y Cambio de datos #77

Closed
opened 2022-09-02 12:22:51 -05:00 by Rodia · 5 comments
Owner

Con el cambio en la salida de equipos la asignación del equipo se pone en el albaranes de Cliente (Envío).

en el modelo 'stock.move' se crean dos campos y las funciones que los actualizan.

class Move(metaclass=PoolMeta):
    "Stock Move"
    __name__ = "stock.move"

    product_equipment = fields.Function(fields.Boolean("It Equipment"),'get_product_equipment')
    equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
                                domain=[('state', '=', 'registred'),
                                        ('product','=', Eval('product'))
                                        ],
                                states={'invisible': If(~Eval('product_equipment'), True),},
                                depends=['product_equipment'])

    equipment_serial = fields.Function(fields.Char('Serial',
                                                   states={'readonly': True,
                                                           'invisible': If(~Eval('product_equipment'), True)},
                                                   depends=['product_equipment']),
                                       'get_equipment_serial')


    @fields.depends('product')
    def get_product_equipment(self, product):
        if self.product.equipment:
            return True
        else:
            return False

    @fields.depends('equipment')
    def get_equipment_serial(self, equipment):
        if self.equipment:
            return self.equipment.serial
        else:
            return None
        
    @fields.depends('product', 'equipment', 'uom')
    def on_change_product(self):
        if self.product:
            if (not self.uom
                    or self.uom.category != self.product.default_uom.category):
                self.uom = self.product.default_uom


    @fields.depends(methods=['get_equipment_serial'])
    def on_change_equipment(self):
        if self.equipment:
            self.product = self.equipment.product.id
            self.equipment_serial = self.get_equipment_serial(self.equipment)
        else:
            self.equipment_serial = None

Estos campos se adicionan dentro de la línea del movimiento en el envío.

La persona encargada de darle salida al equipo adicionaría un equipo a la línea del movimiento del envío, Sin embargo estas líneas de movimientos no se actualizan por si solas en los "movimientos". Adicionalmente a esto se necesita hacer que el propietario del equipo cambio por el tercero del envío y la dirección del equipo cambie por la dirección del envío. Estado del equipo también cambia a "uncontrated".

@classmethod
@ModelView.button
@Workflow.transition('picked')
@set_employee('picked_by')
def pick(cls, shipments):
    pool = Pool()
    Move = pool.get('stock.move')

    raise UserError(str(dir(Move)))

    Move.delete([
            m for s in shipments for m in s.inventory_moves
            if m.state == 'staging'])
    Move.do([m for s in shipments for m in s.inventory_moves])
    cls._sync_inventory_to_outgoing(shipments, quantity=True)

Con el Button "picked" los movimientos de existencias ya pasan a finalizados es por esto que se propone que este botón sea el que realize el cambio de variables.

Con respecto a los origens, el equipo cuenta con tres origenes.

  • Compra
  • Venta (se tomaría de la venta que generó el envío)
  • Envio (Acta de Entrega)

@alnus, ¿podrías asumir esta tarea?. ¿Se podría tener un estimado de cuanto pueda tardar esto?

Con el cambio en la salida de equipos la asignación del equipo se pone en el albaranes de Cliente (Envío). en el modelo 'stock.move' se crean dos campos y las funciones que los actualizan. ``` class Move(metaclass=PoolMeta): "Stock Move" __name__ = "stock.move" product_equipment = fields.Function(fields.Boolean("It Equipment"),'get_product_equipment') equipment = fields.Many2One('optical_equipment.equipment', "Equipment", domain=[('state', '=', 'registred'), ('product','=', Eval('product')) ], states={'invisible': If(~Eval('product_equipment'), True),}, depends=['product_equipment']) equipment_serial = fields.Function(fields.Char('Serial', states={'readonly': True, 'invisible': If(~Eval('product_equipment'), True)}, depends=['product_equipment']), 'get_equipment_serial') @fields.depends('product') def get_product_equipment(self, product): if self.product.equipment: return True else: return False @fields.depends('equipment') def get_equipment_serial(self, equipment): if self.equipment: return self.equipment.serial else: return None @fields.depends('product', 'equipment', 'uom') def on_change_product(self): if self.product: if (not self.uom or self.uom.category != self.product.default_uom.category): self.uom = self.product.default_uom @fields.depends(methods=['get_equipment_serial']) def on_change_equipment(self): if self.equipment: self.product = self.equipment.product.id self.equipment_serial = self.get_equipment_serial(self.equipment) else: self.equipment_serial = None ``` Estos campos se adicionan dentro de la línea del movimiento en el envío. La persona encargada de darle salida al equipo adicionaría un equipo a la línea del movimiento del envío, Sin embargo estas líneas de movimientos no se actualizan por si solas en los "movimientos". Adicionalmente a esto se necesita hacer que el propietario del equipo cambio por el tercero del envío y la dirección del equipo cambie por la dirección del envío. Estado del equipo también cambia a "uncontrated". ``` @classmethod @ModelView.button @Workflow.transition('picked') @set_employee('picked_by') def pick(cls, shipments): pool = Pool() Move = pool.get('stock.move') raise UserError(str(dir(Move))) Move.delete([ m for s in shipments for m in s.inventory_moves if m.state == 'staging']) Move.do([m for s in shipments for m in s.inventory_moves]) cls._sync_inventory_to_outgoing(shipments, quantity=True) ``` Con el Button "picked" los movimientos de existencias ya pasan a finalizados es por esto que se propone que este botón sea el que realize el cambio de variables. Con respecto a los origens, el equipo cuenta con tres origenes. - Compra - Venta (se tomaría de la venta que generó el envío) - Envio (Acta de Entrega) @alnus, ¿podrías asumir esta tarea?. ¿Se podría tener un estimado de cuanto pueda tardar esto?
Rodia changed title from Asignación de Seriales en Albaranes de Clientes. to Asignación de Seriales en Albaranes de Clientes. Y Cambio de datos 2022-09-02 12:29:03 -05:00
alnus was assigned by Rodia 2022-09-02 12:30:03 -05:00
Owner

@alnus, ¿podrías asumir esta tarea?. ¿Se podría tener un estimado de cuanto pueda tardar esto?

Lo revisaré (ese commit existe) hoy en la noche y mañana tengo una respuesta del tiempo.

> @alnus, ¿podrías asumir esta tarea?. ¿Se podría tener un estimado de cuanto pueda tardar esto? Lo revisaré (ese commit existe) hoy en la noche y mañana tengo una respuesta del tiempo.
Author
Owner
https://gitea.onecluster.org/OneTeam/trytondo-optical_equipment/commit/6a3ce61e065de4638cab913c0d2bbe619afb9bc3
Owner

Favor compartir una base de datos que contenga información con las pruebas hasta el momento. Muchas gracias

Favor compartir una base de datos que contenga información con las pruebas hasta el momento. Muchas gracias
Owner

Para que tome el equipo y el serial del envió se puede usar en:
https://hg.tryton.org/modules/stock/file/tip/shipment.py#l923

en le método:
https://hg.tryton.org/modules/stock/file/tip/shipment.py#l1195

agregar algo similar:

def get_outgoing_moves(self, name):
    moves = []
    if self.state == 'done']:
        for move in self.inventory_moves:
            moves.append(move.id)
        return moves
    else:
        for move in self.moves:
            if move.from_location == self.warehouse_output:
                moves.append(move.id)
        return moves

Para el cambio de propietario se podría usar en done:

Equipments = pool.get('optical_equipment.equipment')

for shipment in shipments:
    for move in shipment.inventory_moves:
        if move.equipment:

            equipment  = move.equipment
            Id = equipment.id
            equipment = Equipments.search(['id', '=',Id])[0]
            equipment.propietary = shipment.customer.id
            equipment.propietary_address= shipment.delivery_address.id
            equipment.state="uncontrated"
            equipment.shipment_destination = shipment
            equipment.maintenance_frequency = "6" if shipment.customer.client_type == "ips" else "12"
            equipment.save()  

En general el código propuesto se encuentra bien.

Para que tome el equipo y el serial del envió se puede usar en: https://hg.tryton.org/modules/stock/file/tip/shipment.py#l923 en le método: https://hg.tryton.org/modules/stock/file/tip/shipment.py#l1195 agregar algo similar: ``` def get_outgoing_moves(self, name): moves = [] if self.state == 'done']: for move in self.inventory_moves: moves.append(move.id) return moves else: for move in self.moves: if move.from_location == self.warehouse_output: moves.append(move.id) return moves ``` Para el cambio de propietario se podría usar en done: ``` Equipments = pool.get('optical_equipment.equipment') for shipment in shipments: for move in shipment.inventory_moves: if move.equipment: equipment = move.equipment Id = equipment.id equipment = Equipments.search(['id', '=',Id])[0] equipment.propietary = shipment.customer.id equipment.propietary_address= shipment.delivery_address.id equipment.state="uncontrated" equipment.shipment_destination = shipment equipment.maintenance_frequency = "6" if shipment.customer.client_type == "ips" else "12" equipment.save() ``` En general el código propuesto se encuentra bien.
Author
Owner

Gracias esto es aplicado, además se realizan pruebas.

Gracias esto es aplicado, además se realizan pruebas.
Rodia closed this issue 2022-09-06 11:14:01 -05:00
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: OneTeam/trytondo-optical_equipment#77
No description provided.