Configurar M_InOut_Invoice automático

Espaço para tópicos sobre funcionalidades padrão do Compiere / Adempiere.
claudio.cth
Mensagens: 44
Registrado em: Sáb Nov 05, 2011 10:36 pm

Configurar M_InOut_Invoice automático

Mensagempor claudio.cth » Sáb Fev 18, 2012 11:24 pm

Estou tentando personalizar o adempiere para o processo M_InOut_Invoice ser automático após o RECEBIMENTO DE MATERIAL ser completado.

Tentei de três formas, sem sucesso e pelo mesmo motivo:
Configurar como um Nó do tipo APPS PROCESS (Processo de aplicação)
Configurar como um novo processo do tipo VALOR DO DOCUMENTO para quando for detectado que um @docstatus@ = CO ele executa aquele processo.
Criar um VALIDADOR DE MODELO, mas esse foi em vão já que o método docValidate() é executado no PrepareIt().. aí não adianta muito hehe

Alguém tem alguma sugestão para automatizar o processo dessa forma??

Obrigado!!
Claudio Cavalcante

ralexsander
Mensagens: 576
Registrado em: Ter Nov 21, 2006 7:43 am
Localização: São Paulo
Contato:

Re: Configurar M_InOut_Invoice automático

Mensagempor ralexsander » Dom Fev 19, 2012 11:26 am

Usando o Model Validator você consegue definir qual é o tempo em que você deseja que o processo seja executado.

Código: Selecionar todos

   /** Called before document is prepared */
   public static final int TIMING_BEFORE_PREPARE = 1;
   public static final int DOCTIMING_BEFORE_PREPARE = 1; // Compatibility with Compiere 260c
   /** Called before document is void */
   public static final int TIMING_BEFORE_VOID = 2;
   /** Called before document is close */
   public static final int TIMING_BEFORE_CLOSE = 3;
   /** Called before document is reactivate */
   public static final int TIMING_BEFORE_REACTIVATE = 4;
   /** Called before document is reversecorrect */
   public static final int TIMING_BEFORE_REVERSECORRECT = 5;
   /** Called before document is reverseaccrual */
   public static final int TIMING_BEFORE_REVERSEACCRUAL = 6;
   /** Called before document is completed */
   public static final int TIMING_BEFORE_COMPLETE = 7;
   /** Called after document is prepared */
   public static final int TIMING_AFTER_PREPARE = 8;
   /** Called after document is completed */
   public static final int TIMING_AFTER_COMPLETE = 9;
   public static final int DOCTIMING_AFTER_COMPLETE = 9; // Compatibility with Compiere 260c
   /** Called after document is void */
   public static final int TIMING_AFTER_VOID = 10;
   /** Called after document is closed */
   public static final int TIMING_AFTER_CLOSE = 11;
   /** Called after document is reactivated */
   public static final int TIMING_AFTER_REACTIVATE = 12;
   /** Called after document is reversecorrect */
   public static final int TIMING_AFTER_REVERSECORRECT = 13;
   /** Called after document is reverseaccrual */
   public static final int TIMING_AFTER_REVERSEACCRUAL = 14;
   /** Called before document is posted */
   public static final int TIMING_BEFORE_POST = 15;
   /** Called after document is posted */
   public static final int TIMING_AFTER_POST = 16;


Para o seu caso eu sugiro usar o TIMING_AFTER_COMPLETE
Ricardo Alexsander Santana
http://www.kenos.com.br

claudio.cth
Mensagens: 44
Registrado em: Sáb Nov 05, 2011 10:36 pm

Re: Configurar M_InOut_Invoice automático

Mensagempor claudio.cth » Dom Fev 19, 2012 4:32 pm

Sim, eu usei o TIMING_AFTER_COMPLETE, mas isso não adianta.. porque o docValidate é no prepareIt.. ou seja ele passa pelo DocValidate para depois completar.

aqui o meu método

Código: Selecionar todos

private String docValidate(MInOut ship, int timing){

            
      if (timing == TIMING_AFTER_COMPLETE ){
         log.info("M_InOut_ID=" + ship.get_ID()
               + ", M_PriceList_ID=" + 0
               + ", InvoiceDocumentNo=" + 0);
         
         if (ship.get_ID() == 0)
            throw new IllegalArgumentException("No Shipment");

         if (ship.get_ID() == 0)
            throw new IllegalArgumentException("Shipment not found");
            
         if (!MInOut.DOCSTATUS_Completed.equals(ship.getDocStatus()))
            throw new IllegalArgumentException("Shipment not completed");
            
         MInvoice invoice = new MInvoice (ship, null);
         
         // Should not override pricelist for RMA
         if (ship.get_ID() != 0 && ship.getM_RMA_ID() == 0)
            invoice.setM_PriceList_ID(ship.get_ID());
         if (!invoice.save())
            throw new IllegalArgumentException("Cannot save Invoice");

         MInOutLine[] shipLines = ship.getLines(false);
         for (int i = 0; i < shipLines.length; i++)
         {
            MInOutLine sLine = shipLines[i];
            MInvoiceLine line = new MInvoiceLine(invoice);
            line.setShipLine(sLine);
            if (sLine.sameOrderLineUOM())
               line.setQtyEntered(sLine.getQtyEntered());
            else
               line.setQtyEntered(sLine.getMovementQty());
            line.setQtyInvoiced(sLine.getMovementQty());
            if (!line.save())
               throw new IllegalArgumentException("Cannot save Invoice Line");
         }
         
         return invoice.getDocumentNo();
      }
      return null;
   }
Claudio Cavalcante

claudio.cth
Mensagens: 44
Registrado em: Sáb Nov 05, 2011 10:36 pm

Re: Configurar M_InOut_Invoice automático

Mensagempor claudio.cth » Seg Fev 20, 2012 5:43 pm

Consegui resolver!!!!

Primeiramente eu havia feito dessa forma:

(start) → (docprepare) → (doccomplete) → (Fatura Gerada), mas dava erro.

(Fatura Gerada) era da seguinte forma: Ação: Processo de aplicação | Processo: M_InOut_CreateInvoice_Gerar Fatura a partir do Recibo.

No entanto, ele dava um erro informando "Shipment not completed".

Então fiz assim:

(start) → (docprepare) → (doccomplete) → (Recebimento de material concluído) → (Fatura Gerada) e funcionou.

(Recebimento de material concluído) era da seguinte forma: Ação: Janela de usuário | Janela: Recebimento de material.


Para a Requisição gerar Pedido de compra automaticamente não precisava desse passo intermediário, já que não importa o estado do documento para a Requisição se tornar um Pedido de compra, enquanto que para Recebimento de material se tornar Fatura, o estado do documento completo é exigido.

Enfim, Obrigado pela ajuda.
Claudio Cavalcante


Voltar para “Funcional”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 1 visitante