• Este debate está vacío.
Viendo 3 entradas - de la 1 a la 3 (de un total de 3)
  • Autor
    Entradas
  • #31874
    Carranza Carlos
    Participante

    He generado un proceso batch que sirve para generar pedidos (abonos, en este caso mensuales) los cuales, al juntarse con otros pedidos generados a mano, podrían ser facturados.
    Los pedidos los he podido generar sin problemas (cabecera y varios ítems, basados en distintos argumentos a cobrar), el problema es que no puedo dejarlos en estado “Completado” y por lo tanto luego no me aparecen para poder ser seleccionados y facturados.
    Una pequeña parte del código, la que cerraría esto, es como sigue. Alguien me puede indicar qué estoy haciendo mal (antes de esto están el select que genera el cursor de donde se sacan las distintas líneas que van en las líneas)?

    String sql = sql1 + sql2 + sql3 + ” order by 2, 3, 6 desc “;
    PreparedStatement pstmt = null;
    try
    {
    pstmt = DB.prepareStatement( sql,get_TrxName());
    rs = pstmt.executeQuery();
    MOrder order = null;
    MOrder newOrder = null;
    int cbpartnerId = 0;

    while(rs.next())
    {
    if(cbpartnerId != rs.getInt(“c_bpartner_id”))
    {
    cbpartnerId = rs.getInt(“c_bpartner_id”);
    newOrder = new MOrder(getCtx(), 0, get_TrxName());
    if(order != null)
    {
    order.processIt(MOrder.DOCACTION_Prepare);
    order.processIt(MOrder.DOCACTION_Approve);
    order.processIt(MOrder.DOCACTION_Complete);
    }
    order = newOrder;
    newOrder = null;
    order.setC_BPartner_ID(cbpartnerId);
    order.setAD_Org_ID(1010057);
    order.setIsActive(true);
    order.approveIt();
    OK = order.save();
    crearLinea(order);
    }
    else
    {
    crearLinea(order);
    }
    }

    rs.close();
    pstmt.close();
    pstmt = null;
    }
    catch(Exception e)
    {
    log.log( Level.SEVERE,sql,e );
    }

    #36079
    Carranza Carlos
    Participante

    En qué clase está el desarrollo del botón completar?
    Estimo que el problema está ahí. Estoy imaginando que, po sólo va haciendo una actualización por vez, es decir primero borrador, después en proceso, etc.; de acuerdo al workflow de pedidos.
    Es así?

    #36080
    Javier Ader
    Participante

    Buenas. El codigo de compleción de Pedidos esta en la clase MOrder, metodo completeIt; pero la forma correcta de completar un Pedido pre-creado en estado Draft (Borrador; C_Oder.DocStatus = ‘DR’), es obteniendo una instancia de MOrder para ese pedido en particular y llamar al metodo de MOrder, processIt (“CO”) o algo muy similar (mira la clase PoSOnline, metodo completeOrder que en un punto hace esto; la diferencia ahi es que ademas se hacen muchas otras cosas, porque ademas crea el pedido desde cero; no te compliques por ese lado, mira solo como lo completa).

    En general, si lo tenes pre-creaados (asumo que si por lo que decís), ya guardados y en estado Draft, lo que tenes que hacer es una función similar a

    Code:
    function String completeOrder(int C_Order_ID)
    {

    //lo lee desde la base de datos; se asume que existe uno con tal C_Order_ID
    //y con el stado Draft
    MOrder o = new MOrder(getCtx(),C_Order_ID,get_TrxName());

    if (o.processIt(“CO)) //lo copleto
    {
    if (o.save()) //y lo salvo
    return “”; //OK
    }
    //si se llega acá hubo un error
    return “Error completando Pedido “+ C_Order_ID + ” ,Num.Doc =” + o.DocumentNo();
    }

    Solo tenes que hacer eso para completarlos (o algo similar) por cada pedido, obteniendo previamente el id del pedido (como hcer esto ya es otro tema(; no hay que leer las lineas ni nada.

Viendo 3 entradas - de la 1 a la 3 (de un total de 3)
  • Debes estar registrado para responder a este debate.