/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * * Contributor(s): * *****************************************************************************/ package org.adempiere.webui.window; import java.beans.PropertyVetoException; import java.io.File; import java.util.StringTokenizer; import java.util.logging.Level; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.ConfirmPanel; import org.adempiere.webui.component.Grid; import org.adempiere.webui.component.Label; import org.adempiere.webui.component.Row; import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.Window; import org.adempiere.webui.editor.WSearchEditor; import org.adempiere.webui.event.ValueChangeEvent; import org.adempiere.webui.event.ValueChangeListener; import org.adempiere.webui.panel.StatusBarPanel; import org.compiere.model.Lookup; import org.compiere.model.MClient; import org.compiere.model.MLookupFactory; import org.compiere.model.MUser; import org.compiere.model.MUserMail; import org.compiere.util.CLogger; import org.compiere.util.DisplayType; import org.compiere.util.EMail; import org.compiere.util.Env; import org.compiere.util.Msg; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zkex.zul.Borderlayout; import org.zkoss.zkex.zul.Center; import org.zkoss.zkex.zul.South; import org.zkoss.zul.Div; import org.zkoss.zul.Separator; /** * EMail Dialog * * @author Jorg Janke * @version $Id: EMailDialog.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ * * globalqss: integrate phib fixing bug reported here * http://sourceforge.net/tracker/index.php?func=detail&aid=1568765&group_id=176962&atid=879332 * * phib - fixing bug [ 1568765 ] Close email dialog button broken * * globalqss - Carlos Ruiz - implement CC - FR [ 1754879 ] Enhancements on sending e-mail * */ public class WEMailDialog extends Window implements EventListener, ValueChangeListener { /** * */ private static final long serialVersionUID = -2960343329714019910L; /** * EMail Dialog * @param owner calling window * @param title title * @param from from * @param to to * @param subject subject * @param message message * @param attachment optional attachment */ public WEMailDialog (Window owner, String title, MUser from, String to, String subject, String message, File attachment) { super(); this.setTitle(title); this.setWidth("500px"); this.setHeight("500px"); this.setClosable(true); this.setBorder("normal"); this.setStyle("position:absolute"); commonInit(from, to, subject, message, attachment); } // EmailDialog /** * Common Init * @param from from * @param to to * @param subject subject * @param message message * @param attachment optional attachment */ private void commonInit (MUser from, String to, String subject, String message, File attachment) { m_client = MClient.get(Env.getCtx()); try { int WindowNo = 0; int AD_Column_ID = 0; Lookup lookup = MLookupFactory.get (Env.getCtx(), WindowNo, AD_Column_ID, DisplayType.Search, Env.getLanguage(Env.getCtx()), "AD_User_ID", 0, false, "EMail IS NOT NULL"); fUser = new WSearchEditor(lookup, "AD_User_ID", "", false, false, true); fUser.addValueChangeListener(this); fCcUser = new WSearchEditor(lookup, "AD_User_ID", "", false, false, true); fCcUser.addValueChangeListener(this); jbInit(); } catch(Exception ex) { log.log(Level.SEVERE, "EMailDialog", ex); } set(from, to, subject, message); setAttachment(attachment); AEnv.showCenterScreen(this); } // commonInit /** Client */ private MClient m_client = null; /** Sender */ private MUser m_from = null; /** Primary Recipient */ private MUser m_user = null; /** Cc Recipient */ private MUser m_ccuser = null; // private String m_to; private String m_cc; private String m_subject; private String m_message; /** File to be optionally attached */ private File m_attachFile; /** Logger */ private static CLogger log = CLogger.getCLogger(WEMailDialog.class); // private CPanel mainPanel = new CPanel(); // private BorderLayout mainLayout = new BorderLayout(); // private CPanel headerPanel = new CPanel(); // private GridBagLayout headerLayout = new GridBagLayout(); private Textbox fFrom = new Textbox();//20); private Textbox fTo = new Textbox();//20); private Textbox fCc = new Textbox();//20); private WSearchEditor fUser = null; private WSearchEditor fCcUser = null; private Textbox fSubject = new Textbox();//40); private Label lFrom = new Label(); private Label lTo = new Label(); private Label lCc = new Label(); private Label lSubject = new Label(); private Label lAttachment = new Label(); private Textbox fAttachment = new Textbox();//40); private Textbox fMessage = new Textbox(); private ConfirmPanel confirmPanel = new ConfirmPanel(true); private StatusBarPanel statusBar = new StatusBarPanel(); /** * Static Init */ void jbInit() throws Exception { lFrom.setValue(Msg.getMsg(Env.getCtx(), "From") + ":"); lTo.setValue(Msg.getMsg(Env.getCtx(), "To") + ":"); lCc.setValue(Msg.getMsg(Env.getCtx(), "Cc") + ":"); lSubject.setValue(Msg.getMsg(Env.getCtx(), "Subject") + ":"); lAttachment.setValue(Msg.getMsg(Env.getCtx(), "Attachment") + ":"); fFrom.setReadonly(true); statusBar.setStatusDB(null); // Grid grid = new Grid(); grid.setWidth("480px"); grid.setStyle("margin:0; padding:0; position: absolute; align: center; valign: center;"); grid.makeNoStrip(); grid.setOddRowSclass("even"); Rows rows = new Rows(); grid.appendChild(rows); Row row = new Row(); rows.appendChild(row); Div div = new Div(); div.setAlign("right"); div.appendChild(lFrom); row.appendChild(div); row.appendChild(fFrom); fFrom.setWidth("100%"); row = new Row(); rows.appendChild(row); div = new Div(); div.setAlign("right"); div.appendChild(lTo); row.appendChild(div); row.appendChild(fUser.getComponent()); fUser.getComponent().setWidth("100%"); row = new Row(); rows.appendChild(row); row.appendChild(new Label("")); row.appendChild(fTo); fTo.setWidth("100%"); row = new Row(); rows.appendChild(row); div = new Div(); div.setAlign("right"); div.appendChild(lCc); row.appendChild(div); row.appendChild(fCcUser.getComponent()); fCcUser.getComponent().setWidth("100%"); row = new Row(); rows.appendChild(row); row.appendChild(new Label("")); row.appendChild(fCc); fCc.setWidth("100%"); row = new Row(); rows.appendChild(row); row.setSpans("2"); row.appendChild(new Separator()); row = new Row(); rows.appendChild(row); div = new Div(); div.setAlign("right"); div.appendChild(lSubject); row.appendChild(div); row.appendChild(fSubject); fSubject.setWidth("100%"); row = new Row(); rows.appendChild(row); row.setSpans("2"); row.appendChild(new Separator()); row = new Row(); rows.appendChild(row); div = new Div(); div.setAlign("right"); div.appendChild(lAttachment); row.appendChild(div); row.appendChild(fAttachment); fAttachment.setWidth("100%"); row = new Row(); rows.appendChild(row); row.setSpans("2"); row.appendChild(fMessage); fMessage.setWidth("100%"); fMessage.setRows(10); row = new Row(); rows.appendChild(row); row.setSpans("2"); row.appendChild(confirmPanel); confirmPanel.addActionListener(this); Borderlayout layout = new Borderlayout(); layout.setWidth("490px"); layout.setHeight("470px"); layout.setStyle("background-color: white; position: absolute;"); Center center = new Center(); center.appendChild(grid); layout.appendChild(center); center.setStyle("background-color: white"); South south = new South(); south.appendChild(statusBar); layout.appendChild(south); south.setStyle("background-color: white"); this.appendChild(layout); } // jbInit /** * Set all properties */ public void set (MUser from, String to, String subject, String message) { // Content setFrom(from); setTo(to); setSubject(subject); setMessage(message); // statusBar.setStatusLine(m_client.getSMTPHost()); } // set /** * Set Address */ public void setTo(String newTo) { m_to = newTo; fTo.setText(m_to); } // setTo /** * Set CC Address */ public void setCc(String newCc) { m_cc = newCc; fCc.setText(m_cc); } // setCc /** * Get Address */ public String getTo() { m_to = fTo.getText(); return m_to; } // getTo /** * Get CC Address */ public String getCc() { m_cc = fCc.getText(); return m_cc; } // getCc /** * Set Sender */ public void setFrom(MUser newFrom) { m_from = newFrom; if (newFrom == null || !newFrom.isEMailValid() || !newFrom.isCanSendEMail()) { // confirmPanel.getOKButton().setEnabled(false); fFrom.setText("**Invalid**"); } else fFrom.setText(m_from.getEMail()); } // setFrom /** * Get Sender */ public MUser getFrom() { return m_from; } // getFrom /** * Set Subject */ public void setSubject(String newSubject) { m_subject = newSubject; fSubject.setText(m_subject); } // setSubject /** * Get Subject */ public String getSubject() { m_subject = fSubject.getText(); return m_subject; } // getSubject /** * Set Message */ public void setMessage(String newMessage) { m_message = newMessage; fMessage.setText(m_message); // fMessage.setCaretPosition(0); } // setMessage /** * Get Message */ public String getMessage() { m_message = fMessage.getText(); return m_message; } // getMessage /** * Set Attachment */ public void setAttachment (File attachment) { m_attachFile = attachment; if (attachment == null) { lAttachment.setVisible(false); fAttachment.setVisible(false); } else { lAttachment.setVisible(true); fAttachment.setVisible(true); fAttachment.setText(attachment.getName()); fAttachment.setReadonly(true); } } // setAttachment /** * Get Attachment */ public File getAttachment() { return m_attachFile; } // getAttachment /************************************************************************** * Action Listener - Send email */ public void onEvent(Event event) throws Exception { if (event.getTarget().getId().equals(ConfirmPanel.A_CANCEL)) onClose(); if (getTo() == null || getTo().length() == 0) { return; } // Send if (event.getTarget().getId().equals(ConfirmPanel.A_OK)) { StringTokenizer st = new StringTokenizer(getTo(), " ,;", false); String to = st.nextToken(); EMail email = m_client.createEMail(getFrom(), to, getSubject(), getMessage()); String status = "Check Setup"; if (email != null) { while (st.hasMoreTokens()) email.addTo(st.nextToken()); // cc StringTokenizer stcc = new StringTokenizer(getCc(), " ,;", false); while (stcc.hasMoreTokens()) { String cc = stcc.nextToken(); if (cc != null && cc.length() > 0) email.addCc(cc); } // Attachment if (m_attachFile != null && m_attachFile.exists()) email.addAttachment(m_attachFile); status = email.send(); // if (m_user != null) new MUserMail(m_user, m_user.getAD_User_ID(), email).save(); if (email.isSentOK()) { FDialog.info(0, this, "MessageSent"); onClose(); } else FDialog.error(0, this, "MessageNotSent", status); } else FDialog.error(0, this, "MessageNotSent", status); // // confirmPanel.getOKButton().setEnabled(false); // setCursor(Cursor.getDefaultCursor()); } else if (event.getTarget().getId().equals(ConfirmPanel.A_CANCEL)) onClose(); } /** * Vetoable Change - User selected * @param evt * @throws PropertyVetoException */ public void valueChange(ValueChangeEvent evt) { WSearchEditor source = (WSearchEditor) evt.getSource(); Object value = evt.getNewValue(); log.info("Value=" + value); if (value == null) { return; } if (source.equals(fUser)) { // fUser if (value == null) fTo.setText(""); if (value instanceof Integer) { int AD_User_ID = ((Integer)value).intValue(); m_user = MUser.get(Env.getCtx(), AD_User_ID); fTo.setValue(m_user.getEMail()); } } else { // fCcUser if (value == null) fCc.setText(""); if (value instanceof Integer) { int AD_User_ID = ((Integer)value).intValue(); m_ccuser = MUser.get(Env.getCtx(), AD_User_ID); fCc.setValue(m_ccuser.getEMail()); } } return; } } // VEMailDialog