Search in sources :

Example 46 with Trx

use of org.compiere.util.Trx in project adempiere by adempiere.

the class WProcess method createProcessPage.

//	createParameterPage
//Modified by Rob klein 4/29/07	
/**************************************************************************
	 * 	Create Parocess Page
	 * 	@param request request
	 *	@param AD_Process_ID Process
	 *	@return Page
	 */
public void createProcessPage(HttpServletRequest request, HttpServletResponse response, int AD_Process_ID, int AD_Window_ID) {
    MobileSessionCtx wsc = MobileSessionCtx.get(request);
    MProcess process = MProcess.get(wsc.ctx, AD_Process_ID);
    log.info("PI table id " + process.get_Table_ID());
    log.info("PI table name id " + process.get_TableName());
    log.info("PI table client id " + process.getAD_Client_ID());
    log.info("PI table process id " + process.getAD_Process_ID());
    log.info("PI  process class name " + process.getClassname());
    //	need to check if Role can access
    MobileDoc doc = null;
    if (process == null) {
        doc = MobileDoc.createWindow("Process Not Found");
    } else {
        doc = MobileDoc.createWindow(process.getName());
        fieldset center = new fieldset();
        doc.getBody().addElement(center);
        if (process.getDescription() != null)
            center.addElement(new p(new i(process.getDescription())));
        if (process.getHelp() != null)
            center.addElement(new p(process.getHelp(), AlignType.LEFT));
        //	Create Process Instance
        MPInstance pInstance = fillParameter(request, process);
        //		
        int AD_Table_ID = MobileUtil.getParameterAsInt(request, "AD_Table_ID");
        int AD_Record_ID = MobileUtil.getParameterAsInt(request, "AD_Record_ID");
        ProcessInfo pi = new ProcessInfo(process.getName(), process.getAD_Process_ID(), AD_Table_ID, AD_Record_ID);
        pi.setAD_User_ID(Env.getAD_User_ID(wsc.ctx));
        pi.setAD_Client_ID(Env.getAD_Client_ID(wsc.ctx));
        pi.setClassName(process.getClassname());
        log.info("PI client id " + pi.getAD_Client_ID());
        pi.setAD_PInstance_ID(pInstance.getAD_PInstance_ID());
        //	Info
        p p = new p();
        p.addElement(Msg.translate(wsc.ctx, "AD_PInstance_ID") + ": " + pInstance.getAD_PInstance_ID());
        center.addElement(p);
        //	Start
        boolean processOK = false;
        if (process.isWorkflow()) {
            Trx trx = Trx.get(Trx.createTrxName("WebPrc"), true);
            try {
                WProcessCtl.process(this, AD_Window_ID, pi, trx, request);
                //processOK = process.processIt(pi, trx);			
                trx.commit();
                trx.close();
            } catch (Throwable t) {
                trx.rollback();
                trx.close();
            }
            if (pi.isError()) {
                center.addElement(new p("Error:" + pi.getSummary(), AlignType.LEFT).setClass("Cerror"));
                processOK = false;
            } else {
                center.addElement(new p("OK: Workflow Started", AlignType.LEFT));
                processOK = true;
            }
            center.addElement(new p().addElement(pi.getSummary()));
            center.addElement(pi.getLogInfo(true));
        }
        String jasper = process.getJasperReport();
        if (process.isJavaProcess()) {
            if (jasper != null) {
                pi.setPrintPreview(false);
                pi.setIsBatch(true);
            }
            Trx trx = Trx.get(Trx.createTrxName("WebPrc"), true);
            try {
                processOK = process.processIt(pi, trx);
                trx.commit();
                trx.close();
            } catch (Throwable t) {
                trx.rollback();
                trx.close();
            }
            if (!processOK || pi.isError()) {
                center.addElement(new p("Error:" + pi.getSummary(), AlignType.LEFT).setClass("Cerror"));
                processOK = false;
            } else {
                if (jasper != null) {
                    String error = MobileUtil.streamFile(response, pi.getPDFReport());
                    //String error = streamResult (request, response, pInstance.getAD_PInstance_ID(), file);
                    if (error == null)
                        return;
                    doc = MobileDoc.create(error);
                    wsc.ctx.put("AD_PInstance_ID=" + pInstance.getAD_PInstance_ID(), "ok");
                } else {
                    center.addElement(new p().addElement(pi.getSummary()));
                    center.addElement(pi.getLogInfo(true));
                }
            }
        }
        //	Report
        if (process.isReport()) //if (processOK && process.isReport())
        {
            if (jasper == null) {
                log.info(response.toString());
                ReportEngine re = ReportEngine.get(wsc.ctx, pi);
                if (re == null) {
                    center.addElement(new p("Could not start ReportEngine", AlignType.LEFT).setClass("Cerror"));
                } else {
                    try {
                        File file = File.createTempFile("WProcess", ".pdf");
                        boolean ok = re.createPDF(file);
                        if (ok) {
                            String error = MobileUtil.streamFile(response, file);
                            //String error = streamResult (request, response, pInstance.getAD_PInstance_ID(), file);
                            if (error == null)
                                return;
                            doc = MobileDoc.create(error);
                            //Modified by Rob Klein 6/1/07
                            /**
							String url = "WProcess?AD_PInstance_ID=" 
								+ pInstance.getAD_PInstance_ID()
								+ "&File=" 
								+ URLEncoder.encode(file.getAbsolutePath(), WebEnv.ENCODING);
							a link = new a (url, null, a.TARGET_BLANK, process.getName());
							center
								.addElement(new p()
									.addElement("Report created: ")
									.addElement(link));
							//	Marker that Process is OK
							 * */
                            wsc.ctx.put("AD_PInstance_ID=" + pInstance.getAD_PInstance_ID(), "ok");
                        } else
                            center.addElement(new p("Could not create Report", AlignType.LEFT).setClass("Cerror"));
                    } catch (Exception e) {
                        center.addElement(new p("Could not create Report:", AlignType.LEFT).setClass("Cerror"));
                        center.addElement(e.toString());
                    }
                }
            }
        }
    }
    try {
        MobileUtil.createResponse(request, response, this, null, doc, false);
    } catch (IOException e) {
        log.info(e.toString());
    }
}
Also used : MProcess(org.compiere.model.MProcess) org.apache.ecs.xhtml.fieldset(org.apache.ecs.xhtml.fieldset) org.apache.ecs.xhtml.i(org.apache.ecs.xhtml.i) org.apache.ecs.xhtml.li(org.apache.ecs.xhtml.li) ProcessInfo(org.compiere.process.ProcessInfo) IOException(java.io.IOException) ServletException(javax.servlet.ServletException) SQLException(java.sql.SQLException) IOException(java.io.IOException) org.apache.ecs.xhtml.p(org.apache.ecs.xhtml.p) Timestamp(java.sql.Timestamp) MPInstance(org.compiere.model.MPInstance) ReportEngine(org.compiere.print.ReportEngine) Trx(org.compiere.util.Trx) File(java.io.File)

Example 47 with Trx

use of org.compiere.util.Trx in project adempiere by adempiere.

the class VOrderDistributionReceipt method generateMovements.

//	saveSelection
/**************************************************************************
	 *	Generate Shipments
	 */
private void generateMovements() {
    log.info("DD_Order_ID=" + m_DD_Order_ID);
    log.info("MovementDate" + m_MovementDate);
    String trxName = Trx.createTrxName("IOG");
    //trx needs to be committed too
    Trx trx = Trx.get(trxName, true);
    //  prevents from being called twice
    m_selectionActive = false;
    statusBar.setStatusLine(Msg.translate(Env.getCtx(), "M_Movement_ID"));
    statusBar.setStatusDB(String.valueOf(selection.size()));
    if (selection.size() <= 0)
        return;
    Properties m_ctx = Env.getCtx();
    Timestamp MovementDate = (Timestamp) m_MovementDate;
    MDDOrder order = new MDDOrder(m_ctx, Integer.parseInt(m_DD_Order_ID.toString()), trxName);
    MMovement movement = new MMovement(m_ctx, 0, trxName);
    movement.setDD_Order_ID(order.getDD_Order_ID());
    movement.setAD_User_ID(order.getAD_User_ID());
    movement.setPOReference(order.getPOReference());
    movement.setReversal_ID(0);
    movement.setM_Shipper_ID(order.getM_Shipper_ID());
    movement.setDescription(order.getDescription());
    movement.setC_BPartner_ID(order.getC_BPartner_ID());
    movement.setC_BPartner_Location_ID(order.getC_BPartner_Location_ID());
    movement.setAD_Org_ID(order.getAD_Org_ID());
    movement.setAD_OrgTrx_ID(order.getAD_OrgTrx_ID());
    movement.setAD_User_ID(order.getAD_User_ID());
    movement.setC_Activity_ID(order.getC_Activity_ID());
    movement.setC_Campaign_ID(order.getC_Campaign_ID());
    movement.setC_Project_ID(order.getC_Project_ID());
    movement.setMovementDate(MovementDate);
    movement.setDeliveryRule(order.getDeliveryRule());
    movement.setDeliveryViaRule(order.getDeliveryViaRule());
    movement.setDocAction(MMovement.ACTION_Prepare);
    movement.setDocStatus(MMovement.DOCSTATUS_Drafted);
    //Look the document type for the organization
    int docTypeDO_ID = getDocType(MDocType.DOCBASETYPE_MaterialMovement, order.getAD_Org_ID());
    if (docTypeDO_ID > 0)
        movement.setC_DocType_ID(docTypeDO_ID);
    movement.saveEx();
    for (int i = 0; i < selection.size(); i++) {
        int DD_OrderLine_ID = selection.get(i);
        MDDOrderLine oline = new MDDOrderLine(m_ctx, DD_OrderLine_ID, trxName);
        MMovementLine line = new MMovementLine(movement);
        line.setM_Product_ID(oline.getM_Product_ID());
        BigDecimal QtyDeliver = (BigDecimal) miniTable.getValueAt(i, 1);
        if (QtyDeliver == null | QtyDeliver.compareTo(oline.getQtyInTransit()) > 0)
            throw new AdempiereException("Error in Qty");
        line.setOrderLine(oline, QtyDeliver, true);
        line.saveEx();
    }
    movement.setDocAction(MMovement.DOCACTION_Close);
    movement.setDocStatus(movement.completeIt());
    movement.saveEx();
    trx.commit();
    generateMovements_complete(movement);
//
}
Also used : MDDOrderLine(org.eevolution.model.MDDOrderLine) AdempiereException(org.adempiere.exceptions.AdempiereException) Trx(org.compiere.util.Trx) MDDOrder(org.eevolution.model.MDDOrder) Properties(java.util.Properties) MMovementLine(org.compiere.model.MMovementLine) Timestamp(java.sql.Timestamp) MMovement(org.compiere.model.MMovement) BigDecimal(java.math.BigDecimal)

Example 48 with Trx

use of org.compiere.util.Trx in project adempiere by adempiere.

the class AlertProcessor method notifyUsers.

//	processAlert
/**
	 * Notify users
	 * @param users AD_User_ID list
	 * @param subject email subject
	 * @param message email message
	 * @param attachments 
	 * @return how many email were sent
	 */
private int notifyUsers(Collection<Integer> users, String subject, String message, Collection<File> attachments) {
    int countMail = 0;
    for (int user_id : users) {
        MUser user = MUser.get(getCtx(), user_id);
        if (user.isNotificationEMail()) {
            if (m_client.sendEMailAttachments(user_id, subject, message, attachments)) {
                countMail++;
            }
        }
        if (user.isNotificationNote()) {
            Trx trx = null;
            try {
                trx = Trx.get(Trx.createTrxName("AP_NU"), true);
                // Notice
                int AD_Message_ID = 52244;
                /* TODO - Hardcoded message=notes */
                MNote note = new MNote(getCtx(), AD_Message_ID, user_id, trx.getTrxName());
                note.setClientOrg(m_model.getAD_Client_ID(), m_model.getAD_Org_ID());
                note.setTextMsg(message);
                note.saveEx();
                // Attachment
                MAttachment attachment = new MAttachment(getCtx(), MNote.Table_ID, note.getAD_Note_ID(), trx.getTrxName());
                for (File f : attachments) {
                    attachment.addEntry(f);
                }
                attachment.setTextMsg(message);
                attachment.saveEx();
                countMail++;
                trx.commit();
            } catch (Throwable e) {
                if (trx != null)
                    trx.rollback();
            } finally {
                if (trx != null)
                    trx.close();
            }
        }
    }
    return countMail;
}
Also used : MAttachment(org.compiere.model.MAttachment) Trx(org.compiere.util.Trx) MUser(org.compiere.model.MUser) MNote(org.compiere.model.MNote) File(java.io.File)

Example 49 with Trx

use of org.compiere.util.Trx in project adempiere by adempiere.

the class AlertProcessor method processAlert.

//	doWork
/**
	 * 	Process Alert
	 *	@param alert alert
	 *	@return true if processed
	 */
private boolean processAlert(MAlert alert) {
    if (!alert.isValid())
        return false;
    log.info("" + alert);
    StringBuffer message = new StringBuffer(alert.getAlertMessage()).append(Env.NL);
    //
    boolean valid = true;
    boolean processed = false;
    ArrayList<File> attachments = new ArrayList<File>();
    MAlertRule[] rules = alert.getRules(false);
    for (int i = 0; i < rules.length; i++) {
        if (i > 0)
            message.append(Env.NL);
        //	assume r/o
        String trxName = null;
        MAlertRule rule = rules[i];
        if (!rule.isValid())
            continue;
        log.fine("" + rule);
        //	Pre
        String sql = rule.getPreProcessing();
        if (sql != null && sql.length() > 0) {
            int no = DB.executeUpdate(sql, false, trxName);
            if (no == -1) {
                ValueNamePair error = CLogger.retrieveError();
                rule.setErrorMsg("Pre=" + error.getName());
                m_errors.append("Pre=" + error.getName());
                rule.setIsValid(false);
                rule.saveEx();
                valid = false;
                break;
            }
        }
        //	Pre
        //	The processing
        sql = rule.getSql(true);
        try {
            String text = null;
            if (MSysConfig.getBooleanValue("ALERT_SEND_ATTACHMENT_AS_XLS", true, Env.getAD_Client_ID(getCtx())))
                text = getExcelReport(rule, sql, trxName, attachments);
            else
                text = getPlainTextReport(rule, sql, trxName, attachments);
            if (text != null && text.length() > 0) {
                message.append(text);
                processed = true;
            }
        } catch (Exception e) {
            rule.setErrorMsg("Select=" + e.getLocalizedMessage());
            m_errors.append("Select=" + e.getLocalizedMessage());
            rule.setIsValid(false);
            rule.saveEx();
            valid = false;
            break;
        }
        //	Post
        sql = rule.getPostProcessing();
        if (sql != null && sql.length() > 0) {
            int no = DB.executeUpdate(sql, false, trxName);
            if (no == -1) {
                ValueNamePair error = CLogger.retrieveError();
                rule.setErrorMsg("Post=" + error.getName());
                m_errors.append("Post=" + error.getName());
                rule.setIsValid(false);
                rule.saveEx();
                valid = false;
                break;
            }
        }
        /**	Trx				*/
        if (trxName != null) {
            Trx trx = Trx.get(trxName, false);
            if (trx != null) {
                trx.commit();
                trx.close();
            }
        }
    }
    //	Update header if error
    if (!valid) {
        alert.setIsValid(false);
        alert.saveEx();
        return false;
    }
    //	Nothing to report
    if (!processed) {
        m_summary.append(alert.getName()).append("=No Result - ");
        return true;
    }
    //
    // Report footer - Date Generated
    DateFormat df = DisplayType.getDateFormat(DisplayType.DateTime);
    message.append("\n\n");
    message.append(Msg.translate(getCtx(), "Date")).append(" : ").append(df.format(new Timestamp(System.currentTimeMillis())));
    Collection<Integer> users = alert.getRecipientUsers();
    int countMail = notifyUsers(users, alert.getAlertSubject(), message.toString(), attachments);
    m_summary.append(alert.getName()).append(" (EMails+Notes=").append(countMail).append(") - ");
    return valid;
}
Also used : ArrayList(java.util.ArrayList) Timestamp(java.sql.Timestamp) MAlertRule(org.compiere.model.MAlertRule) DateFormat(java.text.DateFormat) ValueNamePair(org.compiere.util.ValueNamePair) Trx(org.compiere.util.Trx) File(java.io.File)

Example 50 with Trx

use of org.compiere.util.Trx in project adempiere by adempiere.

the class ADTreeOnDropListener method moveNode.

//	moveNode
private void moveNode(DefaultTreeNode movingNode, DefaultTreeNode toNode, boolean moveInto) {
    DefaultTreeNode newParent;
    int index;
    //  remove
    DefaultTreeNode oldParent = treeModel.getParent(movingNode);
    treeModel.removeNode(movingNode);
    //get new index
    if (!moveInto) {
        newParent = treeModel.getParent(toNode);
        //	the next node
        index = newParent.getChildren().indexOf(toNode) + 1;
    } else //	drop on a summary node
    {
        newParent = toNode;
        //	the first node
        index = 0;
    }
    //  insert
    treeModel.addNode(newParent, movingNode, index);
    int[] path = treeModel.getPath(movingNode);
    Treeitem movingItem = tree.renderItemByPath(path);
    tree.setSelectedItem(movingItem);
    Events.sendEvent(tree, new Event(Events.ON_SELECT, tree));
    //	***	Save changes to disk
    Trx trx = Trx.get(Trx.createTrxName("ADTree"), true);
    try {
        int no = 0;
        MTreeNode oldMParent = (MTreeNode) oldParent.getData();
        for (int i = 0; i < oldParent.getChildCount(); i++) {
            DefaultTreeNode nd = (DefaultTreeNode) oldParent.getChildAt(i);
            MTreeNode md = (MTreeNode) nd.getData();
            StringBuffer sql = new StringBuffer("UPDATE ");
            sql.append(mTree.getNodeTableName()).append(" SET Parent_ID=").append(oldMParent.getNode_ID()).append(", SeqNo=").append(i).append(", Updated=SysDate").append(" WHERE AD_Tree_ID=").append(mTree.getAD_Tree_ID()).append(" AND Node_ID=").append(md.getNode_ID());
            log.fine(sql.toString());
            no = DB.executeUpdate(sql.toString(), trx.getTrxName());
        }
        if (oldParent != newParent) {
            MTreeNode newMParent = (MTreeNode) newParent.getData();
            for (int i = 0; i < newParent.getChildCount(); i++) {
                DefaultTreeNode nd = (DefaultTreeNode) newParent.getChildAt(i);
                MTreeNode md = (MTreeNode) nd.getData();
                StringBuffer sql = new StringBuffer("UPDATE ");
                sql.append(mTree.getNodeTableName()).append(" SET Parent_ID=").append(newMParent.getNode_ID()).append(", SeqNo=").append(i).append(", Updated=SysDate").append(" WHERE AD_Tree_ID=").append(mTree.getAD_Tree_ID()).append(" AND Node_ID=").append(md.getNode_ID());
                log.fine(sql.toString());
                no = DB.executeUpdate(sql.toString(), trx.getTrxName());
            }
        }
        //	COMMIT          *********************
        trx.commit(true);
    } catch (Exception e) {
        trx.rollback();
        FDialog.error(windowNo, tree, "TreeUpdateError", e.getLocalizedMessage());
    }
    trx.close();
    trx = null;
}
Also used : MTreeNode(org.compiere.model.MTreeNode) Treeitem(org.zkoss.zul.Treeitem) DefaultTreeNode(org.zkoss.zul.DefaultTreeNode) Event(org.zkoss.zk.ui.event.Event) DropEvent(org.zkoss.zk.ui.event.DropEvent) Trx(org.compiere.util.Trx)

Aggregations

Trx (org.compiere.util.Trx)60 SQLException (java.sql.SQLException)20 ProcessInfo (org.compiere.process.ProcessInfo)16 AdempiereException (org.adempiere.exceptions.AdempiereException)12 MPInstance (org.compiere.model.MPInstance)11 DBException (org.adempiere.exceptions.DBException)10 Timestamp (java.sql.Timestamp)9 File (java.io.File)8 Properties (java.util.Properties)8 Connection (java.sql.Connection)7 MPInstancePara (org.compiere.model.MPInstancePara)7 BigDecimal (java.math.BigDecimal)6 PreparedStatement (java.sql.PreparedStatement)6 ResultSet (java.sql.ResultSet)6 IOException (java.io.IOException)5 MTable (org.compiere.model.MTable)5 PO (org.compiere.model.PO)5 ServletException (javax.servlet.ServletException)4 CConnection (org.compiere.db.CConnection)4 ReportEngine (org.compiere.print.ReportEngine)4