Search in sources :

Example 6 with MInOut

use of org.compiere.model.MInOut in project adempiere by adempiere.

the class GenerateLandedCost method createLandedCost.

public void createLandedCost(MInOut inOut, MInOutLine inOutLine) {
    MInOut document = inOut;
    if (document == null)
        document = inOutLine.getParent();
    MLandedCost landedCost = new MLandedCost(getCtx(), 0, get_TrxName());
    landedCost.setAD_Org_ID(document.getAD_Org_ID());
    landedCost.setC_InvoiceLine_ID(getRecord_ID());
    landedCost.setM_InOut_ID(document.getM_InOut_ID());
    landedCost.setDescription(document.getPOReference());
    landedCost.setLandedCostDistribution(getCostDistribution());
    landedCost.setM_CostElement_ID(getCostElementId());
    if (inOut == null) {
        landedCost.setM_InOutLine_ID(inOutLine.getM_InOutLine_ID());
        landedCost.setM_Product_ID(inOutLine.getM_Product_ID());
    }
    landedCost.saveEx();
}
Also used : MInOut(org.compiere.model.MInOut) MLandedCost(org.compiere.model.MLandedCost)

Example 7 with MInOut

use of org.compiere.model.MInOut in project adempiere by adempiere.

the class InventoryUtil method createInOut.

public static MInOut createInOut(MMDocument doc, String trxName) {
    MOrder order;
    if (MDocType.DOCBASETYPE_MaterialReceipt.equals(doc.DocBaseType)) {
        order = (MOrder) doc.scenario.get(MDocType.DOCBASETYPE_PurchaseOrder, doc.PODocumentNo).document;
    } else if (MDocType.DOCBASETYPE_MaterialDelivery.equals(doc.DocBaseType)) {
        order = (MOrder) doc.scenario.get(MDocType.DOCBASETYPE_SalesOrder, doc.PODocumentNo).document;
    } else {
        throw new IllegalArgumentException("DocBaseType not supported - " + doc);
    }
    //		if (trxName != null && trxName.equals(order.get_TrxName()))
    //			throw new AdempiereException("Internal exception - not same trxName");
    MInOut io = new MInOut(order, 0, doc.Date);
    setGeneratedTag(io);
    io.saveEx();
    //
    MInOutLine iol = null;
    for (MOrderLine oline : order.getLines(true, null)) {
        iol = new MInOutLine(io);
        iol.setOrderLine(oline, 0, doc.Qty);
        iol.setQty(doc.Qty);
        iol.saveEx();
        break;
    }
    //
    doc.document = io;
    processDocument(doc, MInOut.DOCACTION_Complete, MInOut.DOCSTATUS_Completed);
    if (!Util.isEmpty(doc.ASI)) {
        iol.load(trxName);
        doc.scenario.registerASICode(doc.ASI, iol.getM_AttributeSetInstance_ID(), !io.isSOTrx());
    }
    return io;
}
Also used : MInOut(org.compiere.model.MInOut) MOrder(org.compiere.model.MOrder) MInOutLine(org.compiere.model.MInOutLine) MOrderLine(org.compiere.model.MOrderLine)

Example 8 with MInOut

use of org.compiere.model.MInOut in project adempiere by adempiere.

the class SB_InvoiceGenerateFromOrderLine method generate.

//	doIt
/**
	 * 	Generate Shipments
	 * 	@param pstmt order query 
	 *	@return info
	 */
private String generate(MOrder order) {
    try {
        {
            //	New Invoice Location
            if (!p_ConsolidateDocument || (m_invoice != null && m_invoice.getC_BPartner_Location_ID() != order.getBill_Location_ID()))
                completeInvoice();
            boolean completeOrder = MOrder.INVOICERULE_AfterOrderDelivered.equals(order.getInvoiceRule());
            //	Schedule After Delivery
            boolean doInvoice = false;
            if (MOrder.INVOICERULE_CustomerScheduleAfterDelivery.equals(order.getInvoiceRule())) {
                m_bp = new MBPartner(getCtx(), order.getBill_BPartner_ID(), null);
                if (m_bp.getC_InvoiceSchedule_ID() == 0) {
                    log.warning("BPartner has no Schedule - set to After Delivery");
                    order.setInvoiceRule(MOrder.INVOICERULE_AfterDelivery);
                    order.saveEx();
                } else {
                    MInvoiceSchedule is = MInvoiceSchedule.get(getCtx(), m_bp.getC_InvoiceSchedule_ID(), get_TrxName());
                    if (is.canInvoice(order.getDateOrdered(), order.getGrandTotal()))
                        doInvoice = true;
                    else
                        return "";
                }
            }
            //	After Delivery
            if (doInvoice || MOrder.INVOICERULE_AfterDelivery.equals(order.getInvoiceRule())) {
                MInOut[] shipments = order.getShipments();
                for (int i = 0; i < shipments.length; i++) {
                    MInOut ship = shipments[i];
                    if (//	ignore incomplete or reversals 
                    !ship.isComplete() || ship.getDocStatus().equals(MInOut.DOCSTATUS_Reversed))
                        continue;
                    MInOutLine[] shipLines = ship.getLines(false);
                    for (int j = 0; j < shipLines.length; j++) {
                        MInOutLine shipLine = shipLines[j];
                        if (!order.isOrderLine(shipLine.getC_OrderLine_ID()))
                            continue;
                        if (!getSelectionKeys().contains(shipLine.getC_OrderLine_ID()))
                            continue;
                        if (!shipLine.isInvoiced())
                            createLine(order, ship, shipLine);
                    }
                    m_line += 1000;
                }
            } else //	After Order Delivered, Immediate
            {
                MOrderLine[] oLines = order.getLines(true, null);
                for (int i = 0; i < oLines.length; i++) {
                    MOrderLine oLine = oLines[i];
                    if (!getSelectionKeys().contains(oLine.getC_OrderLine_ID()))
                        continue;
                    BigDecimal toInvoice = oLine.getQtyOrdered().subtract(oLine.getQtyInvoiced());
                    if (toInvoice.compareTo(Env.ZERO) == 0 && oLine.getM_Product_ID() != 0)
                        continue;
                    BigDecimal notInvoicedShipment = oLine.getQtyDelivered().subtract(oLine.getQtyInvoiced());
                    //
                    boolean fullyDelivered = oLine.getQtyOrdered().compareTo(oLine.getQtyDelivered()) == 0;
                    //	Complete Order
                    if (completeOrder && !fullyDelivered) {
                        log.fine("Failed CompleteOrder - " + oLine);
                        // Elaine 2008/11/25
                        addLog("Failed CompleteOrder - " + oLine);
                        completeOrder = false;
                        break;
                    } else //	Immediate
                    if (MOrder.INVOICERULE_Immediate.equals(order.getInvoiceRule())) {
                        log.fine("Immediate - ToInvoice=" + toInvoice + " - " + oLine);
                        BigDecimal qtyEntered = toInvoice;
                        if (oLine.getQtyEntered().compareTo(oLine.getQtyOrdered()) != 0)
                            qtyEntered = toInvoice.multiply(oLine.getQtyEntered()).divide(oLine.getQtyOrdered(), 12, BigDecimal.ROUND_HALF_UP);
                        createLine(order, oLine, toInvoice, qtyEntered);
                    } else {
                        log.fine("Failed: " + order.getInvoiceRule() + " - ToInvoice=" + toInvoice + " - " + oLine);
                        addLog("Failed: " + order.getInvoiceRule() + " - ToInvoice=" + toInvoice + " - " + oLine);
                    }
                }
                //	for all order lines
                if (MOrder.INVOICERULE_Immediate.equals(order.getInvoiceRule()))
                    m_line += 1000;
            }
            //	Complete Order successful
            if (completeOrder && MOrder.INVOICERULE_AfterOrderDelivered.equals(order.getInvoiceRule())) {
                MInOut[] shipments = order.getShipments();
                for (int i = 0; i < shipments.length; i++) {
                    MInOut ship = shipments[i];
                    if (//	ignore incomplete or reversals 
                    !ship.isComplete() || ship.getDocStatus().equals(MInOut.DOCSTATUS_Reversed))
                        continue;
                    MInOutLine[] shipLines = ship.getLines(false);
                    for (int j = 0; j < shipLines.length; j++) {
                        MInOutLine shipLine = shipLines[j];
                        if (!order.isOrderLine(shipLine.getC_OrderLine_ID()))
                            continue;
                        if (!shipLine.isInvoiced())
                            createLine(order, ship, shipLine);
                    }
                    m_line += 1000;
                }
            }
        //	complete Order
        }
    //	for all orders
    } catch (Exception e) {
        log.log(Level.SEVERE, "", e);
    }
    completeInvoice();
    return "@Created@ = " + m_created;
}
Also used : MInOut(org.compiere.model.MInOut) MInOutLine(org.compiere.model.MInOutLine) MInvoiceSchedule(org.compiere.model.MInvoiceSchedule) MBPartner(org.compiere.model.MBPartner) MOrderLine(org.compiere.model.MOrderLine) BigDecimal(java.math.BigDecimal)

Example 9 with MInOut

use of org.compiere.model.MInOut in project adempiere by adempiere.

the class InOutGenerateRMA method createShipment.

private MInOut createShipment(MRMA rma) {
    int docTypeId = getShipmentDocTypeId(rma.get_ID());
    if (docTypeId == -1) {
        throw new IllegalStateException("Could not get invoice document type for Vendor RMA");
    }
    MInOut originalReceipt = rma.getShipment();
    MInOut shipment = new MInOut(getCtx(), 0, get_TrxName());
    shipment.setM_RMA_ID(rma.get_ID());
    shipment.setAD_Org_ID(rma.getAD_Org_ID());
    shipment.setAD_OrgTrx_ID(originalReceipt.getAD_OrgTrx_ID());
    shipment.setDescription(rma.getDescription());
    shipment.setC_BPartner_ID(rma.getC_BPartner_ID());
    shipment.setC_BPartner_Location_ID(originalReceipt.getC_BPartner_Location_ID());
    shipment.setIsSOTrx(rma.isSOTrx());
    shipment.setC_DocType_ID(docTypeId);
    shipment.setM_Warehouse_ID(originalReceipt.getM_Warehouse_ID());
    shipment.setMovementType(MInOut.MOVEMENTTYPE_VendorReturns);
    shipment.setC_Project_ID(originalReceipt.getC_Project_ID());
    shipment.setC_Campaign_ID(originalReceipt.getC_Campaign_ID());
    shipment.setC_Activity_ID(originalReceipt.getC_Activity_ID());
    shipment.setUser1_ID(originalReceipt.getUser1_ID());
    shipment.setUser2_ID(originalReceipt.getUser2_ID());
    shipment.setUser3_ID(originalReceipt.getUser3_ID());
    shipment.setUser4_ID(originalReceipt.getUser4_ID());
    if (!shipment.save()) {
        throw new IllegalStateException("Could not create Shipment");
    }
    return shipment;
}
Also used : MInOut(org.compiere.model.MInOut)

Example 10 with MInOut

use of org.compiere.model.MInOut in project adempiere by adempiere.

the class CreateFromShipment method save.

/**
	 *  Save - Create Invoice Lines
	 *  @return true if saved
	 */
public boolean save(IMiniTable miniTable, String trxName) {
    /*
		dataTable.stopEditor(true);
		log.config("");
		TableModel model = dataTable.getModel();
		int rows = model.getRowCount();
		if (rows == 0)
			return false;
		//
		Integer defaultLoc = (Integer) locatorField.getValue();
		if (defaultLoc == null || defaultLoc.intValue() == 0) {
			locatorField.setBackground(AdempierePLAF.getFieldBackground_Error());
			return false;
		}
		*/
    int M_Locator_ID = defaultLocator_ID;
    if (M_Locator_ID == 0) {
        return false;
    }
    // Get Shipment
    MInOut inout = new MInOut(Env.getCtx(), m_Record_ID, trxName);
    log.config(inout + ", C_Locator_ID=" + M_Locator_ID);
    // Lines
    for (int i = 0; i < miniTable.getRowCount(); i++) {
        if (((Boolean) miniTable.getValueAt(i, 0)).booleanValue()) {
            // variable values
            // Qty
            BigDecimal QtyEntered = (BigDecimal) miniTable.getValueAt(i, 1);
            // UOM
            KeyNamePair pp = (KeyNamePair) miniTable.getValueAt(i, 2);
            int C_UOM_ID = pp.getKey();
            // Locator
            pp = (KeyNamePair) miniTable.getValueAt(i, 3);
            // If a locator is specified on the product, choose that otherwise default locator
            M_Locator_ID = pp != null && pp.getKey() != 0 ? pp.getKey() : defaultLocator_ID;
            // Product
            pp = (KeyNamePair) miniTable.getValueAt(i, 4);
            int M_Product_ID = pp.getKey();
            int C_OrderLine_ID = 0;
            // OrderLine
            pp = (KeyNamePair) miniTable.getValueAt(i, 6);
            if (pp != null)
                C_OrderLine_ID = pp.getKey();
            int M_RMALine_ID = 0;
            // RMA
            pp = (KeyNamePair) miniTable.getValueAt(i, 7);
            // If we have RMA
            if (pp != null)
                M_RMALine_ID = pp.getKey();
            int C_InvoiceLine_ID = 0;
            MInvoiceLine il = null;
            // InvoiceLine
            pp = (KeyNamePair) miniTable.getValueAt(i, 8);
            if (pp != null)
                C_InvoiceLine_ID = pp.getKey();
            if (C_InvoiceLine_ID != 0)
                il = new MInvoiceLine(Env.getCtx(), C_InvoiceLine_ID, trxName);
            //boolean isInvoiced = (C_InvoiceLine_ID != 0);
            //	Precision of Qty UOM
            int precision = 2;
            if (M_Product_ID != 0) {
                MProduct product = MProduct.get(Env.getCtx(), M_Product_ID);
                precision = product.getUOMPrecision();
            }
            QtyEntered = QtyEntered.setScale(precision, BigDecimal.ROUND_HALF_DOWN);
            //
            log.fine("Line QtyEntered=" + QtyEntered + ", Product=" + M_Product_ID + ", OrderLine=" + C_OrderLine_ID + ", InvoiceLine=" + C_InvoiceLine_ID);
            //	Credit Memo - negative Qty
            if (m_invoice != null && m_invoice.isCreditMemo())
                QtyEntered = QtyEntered.negate();
            //	Create new InOut Line
            MInOutLine iol = new MInOutLine(inout);
            //	Line UOM
            iol.setM_Product_ID(M_Product_ID, C_UOM_ID);
            //	Movement/Entered
            iol.setQty(QtyEntered);
            //
            MOrderLine ol = null;
            MRMALine rmal = null;
            if (C_OrderLine_ID != 0) {
                iol.setC_OrderLine_ID(C_OrderLine_ID);
                ol = new MOrderLine(Env.getCtx(), C_OrderLine_ID, trxName);
                if (ol.getQtyEntered().compareTo(ol.getQtyOrdered()) != 0) {
                    iol.setMovementQty(QtyEntered.multiply(ol.getQtyOrdered()).divide(ol.getQtyEntered(), 12, BigDecimal.ROUND_HALF_UP));
                    iol.setC_UOM_ID(ol.getC_UOM_ID());
                }
                iol.setM_AttributeSetInstance_ID(ol.getM_AttributeSetInstance_ID());
                iol.setDescription(ol.getDescription());
                //
                iol.setC_Project_ID(ol.getC_Project_ID());
                iol.setC_ProjectPhase_ID(ol.getC_ProjectPhase_ID());
                iol.setC_ProjectTask_ID(ol.getC_ProjectTask_ID());
                iol.setC_Activity_ID(ol.getC_Activity_ID());
                iol.setC_Campaign_ID(ol.getC_Campaign_ID());
                iol.setAD_OrgTrx_ID(ol.getAD_OrgTrx_ID());
                iol.setUser1_ID(ol.getUser1_ID());
                iol.setUser2_ID(ol.getUser2_ID());
                iol.setUser3_ID(ol.getUser3_ID());
                iol.setUser4_ID(ol.getUser4_ID());
            } else if (il != null) {
                if (il.getQtyEntered().compareTo(il.getQtyInvoiced()) != 0) {
                    iol.setQtyEntered(QtyEntered.multiply(il.getQtyInvoiced()).divide(il.getQtyEntered(), 12, BigDecimal.ROUND_HALF_UP));
                    iol.setC_UOM_ID(il.getC_UOM_ID());
                }
                iol.setDescription(il.getDescription());
                iol.setC_Project_ID(il.getC_Project_ID());
                iol.setC_ProjectPhase_ID(il.getC_ProjectPhase_ID());
                iol.setC_ProjectTask_ID(il.getC_ProjectTask_ID());
                iol.setC_Activity_ID(il.getC_Activity_ID());
                iol.setC_Campaign_ID(il.getC_Campaign_ID());
                iol.setAD_OrgTrx_ID(il.getAD_OrgTrx_ID());
                iol.setUser1_ID(il.getUser1_ID());
                iol.setUser2_ID(il.getUser2_ID());
                iol.setUser3_ID(il.getUser3_ID());
                iol.setUser4_ID(il.getUser4_ID());
            } else if (M_RMALine_ID != 0) {
                rmal = new MRMALine(Env.getCtx(), M_RMALine_ID, trxName);
                iol.setM_RMALine_ID(M_RMALine_ID);
                iol.setQtyEntered(QtyEntered);
                iol.setDescription(rmal.getDescription());
                iol.setM_AttributeSetInstance_ID(rmal.getM_AttributeSetInstance_ID());
                iol.setC_Project_ID(rmal.getC_Project_ID());
                iol.setC_ProjectPhase_ID(rmal.getC_ProjectPhase_ID());
                iol.setC_ProjectTask_ID(rmal.getC_ProjectTask_ID());
                iol.setC_Activity_ID(rmal.getC_Activity_ID());
                iol.setAD_OrgTrx_ID(rmal.getAD_OrgTrx_ID());
                iol.setUser1_ID(rmal.getUser1_ID());
                iol.setUser2_ID(rmal.getUser2_ID());
                iol.setUser3_ID(rmal.getUser3_ID());
                iol.setUser4_ID(rmal.getUser4_ID());
            }
            //	Charge
            if (M_Product_ID == 0) {
                if (//	from order
                ol != null && ol.getC_Charge_ID() != 0)
                    iol.setC_Charge_ID(ol.getC_Charge_ID());
                else if (//	from invoice
                il != null && il.getC_Charge_ID() != 0)
                    iol.setC_Charge_ID(il.getC_Charge_ID());
                else if (// from rma
                rmal != null && rmal.getC_Charge_ID() != 0)
                    iol.setC_Charge_ID(rmal.getC_Charge_ID());
            }
            // Set locator
            iol.setM_Locator_ID(M_Locator_ID);
            if (!iol.save())
                log.log(Level.SEVERE, "Line NOT created #" + i);
            else //	Create Invoice Line Link
            if (il != null) {
                il.setM_InOutLine_ID(iol.getM_InOutLine_ID());
                il.saveEx();
            }
        }
    //   if selected
    }
    /**
		 *  Update Header
		 *  - if linked to another order/invoice/rma - remove link
		 *  - if no link set it
		 */
    if (p_order != null && p_order.getC_Order_ID() != 0) {
        inout.setC_Order_ID(p_order.getC_Order_ID());
        inout.setAD_OrgTrx_ID(p_order.getAD_OrgTrx_ID());
        inout.setC_Project_ID(p_order.getC_Project_ID());
        inout.setC_Campaign_ID(p_order.getC_Campaign_ID());
        inout.setC_Activity_ID(p_order.getC_Activity_ID());
        inout.setUser1_ID(p_order.getUser1_ID());
        inout.setUser2_ID(p_order.getUser2_ID());
        inout.setUser3_ID(p_order.getUser3_ID());
        inout.setUser4_ID(p_order.getUser4_ID());
        if (p_order.isDropShip()) {
            inout.setM_Warehouse_ID(p_order.getM_Warehouse_ID());
            inout.setIsDropShip(p_order.isDropShip());
            inout.setDropShip_BPartner_ID(p_order.getDropShip_BPartner_ID());
            inout.setDropShip_Location_ID(p_order.getDropShip_Location_ID());
            inout.setDropShip_User_ID(p_order.getDropShip_User_ID());
        }
    }
    if (m_invoice != null && m_invoice.getC_Invoice_ID() != 0) {
        if (inout.getC_Order_ID() == 0)
            inout.setC_Order_ID(m_invoice.getC_Order_ID());
        inout.setC_Invoice_ID(m_invoice.getC_Invoice_ID());
        inout.setAD_OrgTrx_ID(m_invoice.getAD_OrgTrx_ID());
        inout.setC_Project_ID(m_invoice.getC_Project_ID());
        inout.setC_Campaign_ID(m_invoice.getC_Campaign_ID());
        inout.setC_Activity_ID(m_invoice.getC_Activity_ID());
        inout.setUser1_ID(m_invoice.getUser1_ID());
        inout.setUser2_ID(m_invoice.getUser2_ID());
        inout.setUser3_ID(m_invoice.getUser3_ID());
        inout.setUser4_ID(m_invoice.getUser4_ID());
    }
    if (m_rma != null && m_rma.getM_RMA_ID() != 0) {
        MInOut originalIO = m_rma.getShipment();
        inout.setIsSOTrx(m_rma.isSOTrx());
        inout.setC_Order_ID(0);
        inout.setC_Invoice_ID(0);
        inout.setM_RMA_ID(m_rma.getM_RMA_ID());
        inout.setAD_OrgTrx_ID(originalIO.getAD_OrgTrx_ID());
        inout.setC_Project_ID(originalIO.getC_Project_ID());
        inout.setC_Campaign_ID(originalIO.getC_Campaign_ID());
        inout.setC_Activity_ID(originalIO.getC_Activity_ID());
        inout.setUser1_ID(originalIO.getUser1_ID());
        inout.setUser2_ID(originalIO.getUser2_ID());
        inout.setUser3_ID(originalIO.getUser3_ID());
        inout.setUser4_ID(originalIO.getUser4_ID());
    }
    inout.saveEx();
    return true;
}
Also used : MInOut(org.compiere.model.MInOut) MProduct(org.compiere.model.MProduct) MInOutLine(org.compiere.model.MInOutLine) MInvoiceLine(org.compiere.model.MInvoiceLine) KeyNamePair(org.compiere.util.KeyNamePair) MOrderLine(org.compiere.model.MOrderLine) MRMALine(org.compiere.model.MRMALine) BigDecimal(java.math.BigDecimal)

Aggregations

MInOut (org.compiere.model.MInOut)38 MInOutLine (org.compiere.model.MInOutLine)22 BigDecimal (java.math.BigDecimal)13 MOrder (org.compiere.model.MOrder)13 MInvoice (org.compiere.model.MInvoice)10 MOrderLine (org.compiere.model.MOrderLine)9 ArrayList (java.util.ArrayList)6 MProduct (org.compiere.model.MProduct)5 MRMA (org.compiere.model.MRMA)5 ResultSet (java.sql.ResultSet)4 Timestamp (java.sql.Timestamp)4 MInvoiceLine (org.compiere.model.MInvoiceLine)4 MRMALine (org.compiere.model.MRMALine)4 MBPartner (org.compiere.model.MBPartner)3 MInOutConfirm (org.compiere.model.MInOutConfirm)3 MInvoiceSchedule (org.compiere.model.MInvoiceSchedule)3 MLocator (org.compiere.model.MLocator)3 MStorage (org.compiere.model.MStorage)3 PreparedStatement (java.sql.PreparedStatement)2 AdempiereException (org.adempiere.exceptions.AdempiereException)2