Search in sources :

Example 1 with MRfQ

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

the class WebInfo method getRfQResponse.

//	getRfQs
/**
	 * 	Get RfQ Response.
	 * 	Needs to have ID set first
	 *	@return rfq of BP with ID
	 */
public MRfQResponse getRfQResponse() {
    m_infoMessage = null;
    MRfQResponse retValue = null;
    String sql = "SELECT * FROM C_RfQResponse " + "WHERE C_RfQ_ID=?" + " AND C_BPartner_ID=? AND IsActive='Y'";
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        pstmt = DB.prepareStatement(sql, null);
        pstmt.setInt(1, m_id);
        pstmt.setInt(2, getC_BPartner_ID());
        rs = pstmt.executeQuery();
        if (rs.next())
            retValue = new MRfQResponse(m_ctx, rs, null);
    } catch (Exception e) {
        log.log(Level.SEVERE, "C_RfQResponse_ID=" + m_id, e);
    } finally {
        DB.close(rs, pstmt);
        rs = null;
        pstmt = null;
    }
    //	No Response existing
    if (retValue == null) {
        MRfQ rfq = new MRfQ(m_ctx, m_id, null);
        //	We can create a Response ?
        if (rfq.get_ID() != 0 && rfq.isSelfService() && rfq.isRfQResponseAccepted() && !rfq.isInvitedVendorsOnly() && getC_BPartner_ID() > 0 && getAD_User_ID() > 0) {
            MBPartner bp = new MBPartner(m_ctx, getC_BPartner_ID(), null);
            bp.setPrimaryAD_User_ID(getAD_User_ID());
            //	may have no lines
            retValue = new MRfQResponse(rfq, bp);
            retValue.saveEx();
        }
    }
    //
    log.fine("C_RfQResponse_ID=" + m_id + " - " + retValue);
    return retValue;
}
Also used : MRfQ(org.compiere.model.MRfQ) ResultSet(java.sql.ResultSet) MRfQResponse(org.compiere.model.MRfQResponse) PreparedStatement(java.sql.PreparedStatement) MBPartner(org.compiere.model.MBPartner)

Example 2 with MRfQ

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

the class RfQCreateSO method doIt.

//	prepare
/**
	 * 	Process.
	 * 	A Sales Order is created for the entered Business Partner.  
	 * 	A sales order line is created for each RfQ line quantity, 
	 * 	where "Offer Quantity" is selected.  
	 * 	If on the RfQ Line Quantity, an offer amount is entered (not 0), 
	 * 	that price is used. 
	 *	If a magin is entered on RfQ Line Quantity, it overwrites the 
	 *	general margin.  The margin is the percentage added to the 
	 *	Best Response Amount.
	 *	@return message
	 */
protected String doIt() throws Exception {
    MRfQ rfq = new MRfQ(getCtx(), p_C_RfQ_ID, get_TrxName());
    if (rfq.get_ID() == 0)
        throw new IllegalArgumentException("No RfQ found");
    log.info("doIt - " + rfq);
    if (rfq.getC_BPartner_ID() == 0 || rfq.getC_BPartner_Location_ID() == 0)
        throw new Exception("No Business Partner/Location");
    MBPartner bp = new MBPartner(getCtx(), rfq.getC_BPartner_ID(), get_TrxName());
    MOrder order = new MOrder(getCtx(), 0, get_TrxName());
    order.setIsSOTrx(true);
    if (p_C_DocType_ID != 0)
        order.setC_DocTypeTarget_ID(p_C_DocType_ID);
    else
        order.setC_DocTypeTarget_ID();
    order.setBPartner(bp);
    order.setC_BPartner_Location_ID(rfq.getC_BPartner_Location_ID());
    order.setSalesRep_ID(rfq.getSalesRep_ID());
    if (rfq.getDateWorkComplete() != null)
        order.setDatePromised(rfq.getDateWorkComplete());
    order.saveEx();
    MRfQLine[] lines = rfq.getLines();
    for (int i = 0; i < lines.length; i++) {
        MRfQLine line = lines[i];
        MRfQLineQty[] qtys = line.getQtys();
        for (int j = 0; j < qtys.length; j++) {
            MRfQLineQty qty = qtys[j];
            if (qty.isActive() && qty.isOfferQty()) {
                MOrderLine ol = new MOrderLine(order);
                ol.setM_Product_ID(line.getM_Product_ID(), qty.getC_UOM_ID());
                ol.setDescription(line.getDescription());
                ol.setQty(qty.getQty());
                //
                BigDecimal price = qty.getOfferAmt();
                if (price == null || price.signum() == 0) {
                    price = qty.getBestResponseAmt();
                    if (price == null || price.signum() == 0) {
                        price = Env.ZERO;
                        log.warning(" - BestResponse=0 - " + qty);
                    } else {
                        BigDecimal margin = qty.getMargin();
                        if (margin == null || margin.signum() == 0)
                            margin = rfq.getMargin();
                        if (margin != null && margin.signum() != 0) {
                            margin = margin.add(ONEHUNDRED);
                            price = price.multiply(margin).divide(ONEHUNDRED, 2, BigDecimal.ROUND_HALF_UP);
                        }
                    }
                }
                //	price
                ol.setPrice(price);
                ol.saveEx();
            }
        //	Offer Qty
        }
    //	All Qtys
    }
    //	All Lines
    //
    rfq.setC_Order_ID(order.getC_Order_ID());
    rfq.saveEx();
    return order.getDocumentNo();
}
Also used : MOrder(org.compiere.model.MOrder) MRfQ(org.compiere.model.MRfQ) MRfQLine(org.compiere.model.MRfQLine) MRfQLineQty(org.compiere.model.MRfQLineQty) MBPartner(org.compiere.model.MBPartner) MOrderLine(org.compiere.model.MOrderLine) BigDecimal(java.math.BigDecimal)

Example 3 with MRfQ

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

the class RfQClose method doIt.

//	prepare
/**
	 * 	Process
	 *	@see org.compiere.process.SvrProcess#doIt()
	 *	@return message
	 */
protected String doIt() throws Exception {
    MRfQ rfq = new MRfQ(getCtx(), p_C_RfQ_ID, get_TrxName());
    if (rfq.get_ID() == 0)
        throw new IllegalArgumentException("No RfQ found");
    log.info("doIt - " + rfq);
    //
    rfq.setProcessed(true);
    rfq.saveEx();
    //
    int counter = 0;
    MRfQResponse[] responses = rfq.getResponses(false, false);
    for (int i = 0; i < responses.length; i++) {
        responses[i].setProcessed(true);
        responses[i].saveEx();
        counter++;
    }
    //
    return "# " + counter;
}
Also used : MRfQ(org.compiere.model.MRfQ) MRfQResponse(org.compiere.model.MRfQResponse)

Example 4 with MRfQ

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

the class RfQCopyLines method doIt.

//	prepare
/**
	 * 	Process
	 *	@see org.compiere.process.SvrProcess#doIt()
	 *	@return message
	 */
protected String doIt() throws Exception {
    log.info("doIt - From_RfQ_ID=" + p_From_RfQ_ID + ", To_RfQ_ID=" + p_To_RfQ_ID);
    //
    MRfQ to = new MRfQ(getCtx(), p_To_RfQ_ID, get_TrxName());
    if (to.get_ID() == 0)
        throw new IllegalArgumentException("No To RfQ found");
    MRfQ from = new MRfQ(getCtx(), p_From_RfQ_ID, get_TrxName());
    if (from.get_ID() == 0)
        throw new IllegalArgumentException("No From RfQ found");
    //	Copy Lines
    int counter = 0;
    MRfQLine[] lines = from.getLines();
    for (int i = 0; i < lines.length; i++) {
        MRfQLine newLine = new MRfQLine(to);
        newLine.setLine(lines[i].getLine());
        newLine.setDescription(lines[i].getDescription());
        newLine.setHelp(lines[i].getHelp());
        newLine.setM_Product_ID(lines[i].getM_Product_ID());
        newLine.setM_AttributeSetInstance_ID(lines[i].getM_AttributeSetInstance_ID());
        //	newLine.setDateWorkStart();
        //	newLine.setDateWorkComplete();
        newLine.setDeliveryDays(lines[i].getDeliveryDays());
        newLine.saveEx();
        //	Copy Qtys
        MRfQLineQty[] qtys = lines[i].getQtys();
        for (int j = 0; j < qtys.length; j++) {
            MRfQLineQty newQty = new MRfQLineQty(newLine);
            newQty.setC_UOM_ID(qtys[j].getC_UOM_ID());
            newQty.setQty(qtys[j].getQty());
            newQty.setIsOfferQty(qtys[j].isOfferQty());
            newQty.setIsPurchaseQty(qtys[j].isPurchaseQty());
            newQty.setMargin(qtys[j].getMargin());
            newQty.saveEx();
        }
        counter++;
    }
    //
    return "# " + counter;
}
Also used : MRfQ(org.compiere.model.MRfQ) MRfQLine(org.compiere.model.MRfQLine) MRfQLineQty(org.compiere.model.MRfQLineQty)

Example 5 with MRfQ

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

the class CreateRfQAction method createRfQ.

private void createRfQ(DefaultMutableTreeNode node) {
    BOMWrapper bom = (BOMWrapper) node.getUserObject();
    MPPOrder mo = new MPPOrder(Env.getCtx(), bom.getPP_Order_ID(), null);
    MResource r = MResource.get(Env.getCtx(), mo.getS_Resource_ID());
    Calendar cal = Calendar.getInstance();
    MRfQ rfq = new MRfQ(Env.getCtx(), 0, null);
    rfq.setName(Msg.translate(Env.getCtx(), "C_RFQ_ID") + ": " + mo.getDocumentNo() + "_" + r.getName() + " (" + bom.getName() + ")");
    rfq.setC_Currency_ID(Env.getContextAsInt(Env.getCtx(), "$C_Currency_ID"));
    rfq.setQuoteType(MRfQ.QUOTETYPE_QuoteSelectedLines);
    rfq.setDateWorkStart(mo.getDateStartSchedule());
    rfq.setDateWorkComplete(mo.getDateFinishSchedule());
    // process parameters
    rfq.setC_RfQ_Topic_ID(((BigDecimal) getParameterValue("C_RFQ_Topic_ID")).intValue());
    rfq.setSalesRep_ID(((BigDecimal) getParameterValue("SalesRep_ID")).intValue());
    savePO(rfq);
    if (successful()) {
        createRfQLines(rfq.get_ID(), node);
    }
}
Also used : MResource(org.compiere.model.MResource) MRfQ(org.compiere.model.MRfQ) Calendar(java.util.Calendar) BOMWrapper(org.eevolution.model.wrapper.BOMWrapper) MPPOrder(org.eevolution.model.MPPOrder)

Aggregations

MRfQ (org.compiere.model.MRfQ)11 MRfQResponse (org.compiere.model.MRfQResponse)5 BigDecimal (java.math.BigDecimal)3 MBPartner (org.compiere.model.MBPartner)3 MRfQLine (org.compiere.model.MRfQLine)3 MRfQLineQty (org.compiere.model.MRfQLineQty)3 PreparedStatement (java.sql.PreparedStatement)2 ResultSet (java.sql.ResultSet)2 MOrder (org.compiere.model.MOrder)2 MOrderLine (org.compiere.model.MOrderLine)2 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Calendar (java.util.Calendar)1 Properties (java.util.Properties)1 ServletOutputStream (javax.servlet.ServletOutputStream)1 MResource (org.compiere.model.MResource)1 MRfQResponseLine (org.compiere.model.MRfQResponseLine)1 MRfQResponseLineQty (org.compiere.model.MRfQResponseLineQty)1 MRfQTopic (org.compiere.model.MRfQTopic)1 MRfQTopicSubscriber (org.compiere.model.MRfQTopicSubscriber)1