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!!
Configurar M_InOut_Invoice automático
-
- Mensagens: 44
- Registrado em: Sáb Nov 05, 2011 10:36 pm
Configurar M_InOut_Invoice automático
Claudio Cavalcante
-
- Mensagens: 589
- Registrado em: Ter Nov 21, 2006 7:43 am
- Localização: São Paulo
- Contato:
Re: Configurar M_InOut_Invoice automático
Usando o Model Validator você consegue definir qual é o tempo em que você deseja que o processo seja executado.
Para o seu caso eu sugiro usar o TIMING_AFTER_COMPLETE
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
http://www.kenos.com.br
-
- Mensagens: 44
- Registrado em: Sáb Nov 05, 2011 10:36 pm
Re: Configurar M_InOut_Invoice automático
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
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
-
- Mensagens: 44
- Registrado em: Sáb Nov 05, 2011 10:36 pm
Re: Configurar M_InOut_Invoice automático
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.
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
Quem está online
Usuários neste fórum: Nenhum usuário registrado e 0 visitante