Esempio n. 1
0
        }       //	setDateAcct

        /// <summary>
        /// Perform Process.
        /// </summary>
        /// <returns>Message to be translated</returns>
        protected override String DoIt()
        {
            //	Update AcctSchema Balances
            if (_UpdateBalances)
            {
                //FinBalance.UpdateBalance(_C_AcctSchema_ID, false);
                FinBalance.UpdateBalance(GetCtx(), _C_AcctSchema_ID,
                                         _DateAcct_From, Get_TrxName(), 0, this);
            }

            CreateBalanceLine();
            CreateDetailLines();

            int AD_PrintFormat_ID = 134;

            if (Ini.IsClient())
            {
                GetProcessInfo().SetTransientObject(MPrintFormat.Get(GetCtx(), AD_PrintFormat_ID, false));
            }
            else
            {
                GetProcessInfo().SetSerializableObject(MPrintFormat.Get(GetCtx(), AD_PrintFormat_ID, false));
            }

            log.Fine((CommonFunctions.CurrentTimeMillis() - _start) + " ms");
            return("");
        }       //	doIt
Esempio n. 2
0
        }       //	prepare

        /// <summary>
        /// Perrform Process.
        /// </summary>
        /// <returns>Message</returns>
        protected override String DoIt()
        {
            //	Need to have Template
            if (_EMailPDF && _R_MailText_ID == 0)
            {
                throw new Exception("@NotFound@: @R_MailText_ID@");
            }
            log.Info("C_BPartner_ID=" + _C_BPartner_ID
                     + ", C_Invoice_ID=" + _C_Invoice_ID
                     + ", IsSOTrx=" + _IsSOTrx
                     + ", EmailPDF=" + _EMailPDF + ",R_MailText_ID=" + _R_MailText_ID
                     + ", DateInvoiced=" + _dateInvoiced_From + "-" + _dateInvoiced_To
                     + ", DocumentNo=" + _DocumentNo_From + "-" + _DocumentNo_To
                     + ", IncludeDrafts=" + _IncludeDraftInvoices);

            MMailText mText = null;

            if (_R_MailText_ID != 0)
            {
                mText = new MMailText(GetCtx(), _R_MailText_ID, Get_TrxName());
                if (mText.Get_ID() != _R_MailText_ID)
                {
                    throw new Exception("@NotFound@: @R_MailText_ID@ - " + _R_MailText_ID);
                }
            }

            //	Too broad selection
            if (_C_BPartner_ID == 0 && _C_Invoice_ID == 0 && _dateInvoiced_From == null && _dateInvoiced_To == null &&
                _DocumentNo_From == null && _DocumentNo_To == null)
            {
                throw new Exception("@RestrictSelection@");
            }

            MClient client = MClient.Get(GetCtx());

            //	Get Info
            StringBuilder sql = new StringBuilder(
                "SELECT i.C_Invoice_ID,bp.AD_Language,c.IsMultiLingualDocument,"                           //	1..3
                //	Prio: 1. BPartner 2. DocType, 3. PrintFormat (Org)	//	see ReportCtl+MInvoice
                + " COALESCE(bp.Invoice_PrintFormat_ID, dt.AD_PrintFormat_ID, pf.Invoice_PrintFormat_ID)," //	4
                + " dt.DocumentCopies+bp.DocumentCopies,"                                                  //	5
                + " bpc.AD_User_ID, i.DocumentNo,"                                                         //	6..7
                + " bp.C_BPartner_ID "                                                                     //	8
                + "FROM C_Invoice i"
                + " INNER JOIN C_BPartner bp ON (i.C_BPartner_ID=bp.C_BPartner_ID)"
                + " LEFT OUTER JOIN AD_User bpc ON (i.AD_User_ID=bpc.AD_User_ID)"
                + " INNER JOIN AD_Client c ON (i.AD_Client_ID=c.AD_Client_ID)"
                + " INNER JOIN AD_PrintForm pf ON (i.AD_Client_ID=pf.AD_Client_ID)"
                + " INNER JOIN C_DocType dt ON (i.C_DocType_ID=dt.C_DocType_ID)")
                                .Append(" WHERE pf.AD_Org_ID IN (0,i.AD_Org_ID) AND "); //	more them 1 PF

            if (_C_Invoice_ID != 0)
            {
                sql.Append("i.C_Invoice_ID=").Append(_C_Invoice_ID);
            }
            else
            {
                if (_IsSOTrx)
                {
                    sql.Append("i.IsSOTrx='Y'");
                }
                else
                {
                    sql.Append("i.IsSOTrx='N'");
                }

                if (!_IncludeDraftInvoices)
                {
                    sql.Append("AND i.DocStatus NOT IN ('DR')");
                }
                if (_C_BPartner_ID != 0)
                {
                    sql.Append(" AND i.C_BPartner_ID=").Append(_C_BPartner_ID);
                }
                //	Date Invoiced
                if (_dateInvoiced_From != null && _dateInvoiced_To != null)
                {
                    sql.Append(" AND TRUNC(i.DateInvoiced,'DD') BETWEEN ")
                    .Append(DataBase.DB.TO_DATE(_dateInvoiced_From, true)).Append(" AND ")
                    .Append(DataBase.DB.TO_DATE(_dateInvoiced_To, true));
                }
                else if (_dateInvoiced_From != null)
                {
                    sql.Append(" AND TRUNC(i.DateInvoiced,'DD') >= ")
                    .Append(DataBase.DB.TO_DATE(_dateInvoiced_From, true));
                }
                else if (_dateInvoiced_To != null)
                {
                    sql.Append(" AND TRUNC(i.DateInvoiced,'DD') <= ")
                    .Append(DataBase.DB.TO_DATE(_dateInvoiced_To, true));
                }
                //	Document No
                else if (_DocumentNo_From != null && _DocumentNo_To != null)
                {
                    sql.Append(" AND i.DocumentNo BETWEEN ")
                    .Append(DataBase.DB.TO_STRING(_DocumentNo_From)).Append(" AND ")
                    .Append(DataBase.DB.TO_STRING(_DocumentNo_To));
                }
                else if (_DocumentNo_From != null)
                {
                    sql.Append(" AND ");
                    if (_DocumentNo_From.IndexOf('%') == -1)
                    {
                        sql.Append("i.DocumentNo >= ")
                        .Append(DataBase.DB.TO_STRING(_DocumentNo_From));
                    }
                    else
                    {
                        sql.Append("i.DocumentNo LIKE ")
                        .Append(DataBase.DB.TO_STRING(_DocumentNo_From));
                    }
                }
            }
            sql.Append(" ORDER BY i.C_Invoice_ID, pf.AD_Org_ID DESC");          //	more than 1 PF record
            log.Finer(sql.ToString());

            MPrintFormat format = null;
            int          old_AD_PrintFormat_ID = -1;
            int          old_C_Invoice_ID      = -1;
            int          C_BPartner_ID         = 0;
            int          count  = 0;
            int          errors = 0;


            IDataReader idr = null;

            try
            {
                idr = DataBase.DB.ExecuteReader(sql.ToString(), null, null);

                while (idr.Read())
                {
                    int C_Invoice_ID = Utility.Util.GetValueOfInt(idr[0]);
                    if (C_Invoice_ID == old_C_Invoice_ID)//Multiple pg Records
                    {
                        continue;
                    }
                    old_C_Invoice_ID = C_Invoice_ID;


                    //	Set Language when enabled
                    //Language language = Language.getLoginLanguage();
                    Language language = Env.GetLoginLanguage(GetCtx());
                    //	Base Language
                    //    String AD_Language = rs.getString(2);
                    String AD_Language = Utility.Util.GetValueOfString(idr[1]);
                    //    if (AD_Language != null && "Y".equals(rs.getString(3)))
                    if (AD_Language != null && "Y".Equals(idr[2]))
                    {
                        //language = Language.getLanguage(AD_Language);
                        language = Language.GetLanguage(AD_Language);
                    }


                    //    int AD_PrintFormat_ID = rs.getInt(4);
                    int AD_PrintFormat_ID = Utility.Util.GetValueOfInt(idr[3]);
                    //    int copies = rs.getInt(5);
                    int copies = Utility.Util.GetValueOfInt(idr[4]);
                    if (copies == 0)
                    {
                        copies = 1;
                    }
                    //    int AD_User_ID = rs.getInt(6);
                    int AD_User_ID = Utility.Util.GetValueOfInt(idr[5]);
                    //    MUser to = new MUser (getCtx(), AD_User_ID, get_TrxName());
                    MUser to = new MUser(GetCtx(), AD_User_ID, Get_TrxName());
                    //    String DocumentNo = rs.getString(7);
                    String DocumentNo = Utility.Util.GetValueOfString(idr[6]);
                    //    C_BPartner_ID = rs.getInt(8);
                    C_BPartner_ID = Utility.Util.GetValueOfInt(idr[7]);
                    //    //
                    //    String documentDir = client.getDocumentDir();
                    String documentDir = client.GetDocumentDir();
                    //    if (documentDir == null || documentDir.length() == 0)
                    if (documentDir == null || documentDir.Length == 0)
                    {
                        documentDir = ".";
                    }

                    if (_EMailPDF && (to.Get_ID() == 0 || to.GetEMail() == null || to.GetEMail().Length == 0))
                    {
                        AddLog(C_Invoice_ID, null, null, DocumentNo + " @RequestActionEMailNoTo@");
                        errors++;
                        continue;
                    }
                    if (AD_PrintFormat_ID == 0)
                    {
                        AddLog(C_Invoice_ID, null, null, DocumentNo + " No Print Format");
                        errors++;
                        continue;
                    }
                    //	Get Format & Data
                    if (AD_PrintFormat_ID != old_AD_PrintFormat_ID)
                    {
                        format = MPrintFormat.Get(GetCtx(), AD_PrintFormat_ID, false);
                        old_AD_PrintFormat_ID = AD_PrintFormat_ID;
                    }

                    format.SetLanguage(language);
                    format.SetTranslationLanguage(language);
                    //    //	query
                    Query query = new Query("C_Invoice_Header_v");
                    query.AddRestriction("C_Invoice_ID", Query.EQUAL, C_Invoice_ID);

                    //	Engine
                    //PrintInfo info = new PrintInfo(
                    //    DocumentNo,
                    //    X_C_Invoice.Table_ID,
                    //    C_Invoice_ID,
                    //    C_BPartner_ID);
                    //info.SetCopies(copies);
                    //ReportEngine re = new ReportEngine(GetCtx(), format, query, info);

                    Boolean printed = false;
                    if (_EMailPDF)
                    {
                        String subject = mText.GetMailHeader() + " - " + DocumentNo;
                        EMail  email   = client.CreateEMail(to.GetEMail(), to.GetName(), subject, null);
                        if (email == null || !email.IsValid())
                        {
                            AddLog(C_Invoice_ID, null, null,
                                   DocumentNo + " @RequestActionEMailError@ Invalid EMail: " + to);
                            errors++;
                            continue;
                        }
                        mText.SetUser(to);                //	Context
                        mText.SetBPartner(C_BPartner_ID); //	Context
                        mText.SetPO(new MInvoice(GetCtx(), C_Invoice_ID, Get_TrxName()));
                        String message = mText.GetMailText(true);
                        if (mText.IsHtml())
                        {
                            email.SetMessageHTML(subject, message);
                        }
                        else
                        {
                            email.SetSubject(subject);
                            email.SetMessageText(message);
                        }
                        //
                        //File invoice = null;
                        FileInfo invoice = null;
                        if (!Ini.IsClient())
                        {
                            //invoice = new File(MInvoice.GetPDFFileName(documentDir, C_Invoice_ID));
                            invoice = new FileInfo(MInvoice.GetPDFFileName(documentDir, C_Invoice_ID));
                        }
                        //File attachment = re.getPDF(invoice);
                        //FileInfo attachment = re.GetPDF(invoice);

                        // log.Fine(to + " - " + attachment);
                        // email.AddAttachment(attachment);

                        //
                        String    msg = email.Send();
                        MUserMail um  = new MUserMail(mText, GetAD_User_ID(), email);
                        um.Save();
                        if (msg.Equals(EMail.SENT_OK))
                        {
                            AddLog(C_Invoice_ID, null, null,
                                   DocumentNo + " @RequestActionEMailOK@ - " + to.GetEMail());
                            count++;
                            printed = true;
                        }
                        else
                        {
                            AddLog(C_Invoice_ID, null, null,
                                   DocumentNo + " @RequestActionEMailError@ " + msg
                                   + " - " + to.GetEMail());
                            errors++;
                        }
                    }
                    else
                    {
                        // re.Print();
                        count++;
                        printed = true;
                    }
                    //	Print Confirm
                    if (printed)
                    {
                        StringBuilder sb = new StringBuilder("UPDATE C_Invoice "
                                                             + "SET DatePrinted=SysDate, IsPrinted='Y' WHERE C_Invoice_ID=")
                                           .Append(C_Invoice_ID);
                        //int no = DataBase.DB.ExecuteUpdateMultiple(sb.ToString(), Get_TrxName());
                        int no = DataBase.DB.ExecuteQuery(sb.ToString(), null, Get_TrxName());
                    }
                } //	for all entries
            }
            catch (Exception e)
            {
                log.Log(Level.SEVERE, sql.ToString(), e);
                //throw new Exception (e);
            }
            finally
            {
                idr.Close();
            }
            //
            if (_EMailPDF)
            {
                return("@Sent@=" + count + " - @Errors@=" + errors);
            }
            return("@Printed@=" + count);
        } //	doIt
Esempio n. 3
0
        public static ProcessReportInfo GenerateReport(Ctx _ctx, int id, List <string> queryInfo, Object code, bool isCreateNew, Dictionary <string, object> nProcessInfo, bool pdf, bool csv)
        {
            ProcessReportInfo rep    = null;
            ReportEngine_N    re     = null;
            Query             _query = null;
            int    Record_ID         = 0;
            object AD_tab_ID         = 0;

            // _ctx.SetContext("#TimeZoneName", "India Standard Time");
            if (queryInfo.Count > 0)
            {
                string tableName  = queryInfo[0];
                string wherClause = queryInfo[1];
                _query = new Query(tableName);

                if (!string.IsNullOrEmpty(wherClause))
                {
                    _query.AddRestriction(wherClause);
                }


                if (_query.GetRestrictionCount() == 1 && (code).GetType() == typeof(int))
                {
                    Record_ID = ((int)code);
                }
            }
            if (queryInfo.Count > 2)
            {
                if (queryInfo[2] != null && queryInfo[2] != "" && Convert.ToInt32(queryInfo[2]) > 0)
                {
                    AD_tab_ID = Convert.ToInt32(queryInfo[2]);
                }
            }
            //Context _ctx = new Context(ctxDic);
            //Env.SetContext(_ctx);
            string lang = _ctx.GetAD_Language().Replace("_", "-");


            System.Globalization.CultureInfo original = System.Threading.Thread.CurrentThread.CurrentCulture;

            System.Threading.Thread.CurrentThread.CurrentCulture   = new System.Globalization.CultureInfo(lang);
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);



            byte[] b = null;
            try
            {
                MPrintFormat pf = null;

                if (!isCreateNew)
                {
                    pf = MPrintFormat.Get(_ctx, id, true);
                }
                else
                {
                    //   pf = MPrintFormat.CreateFromTable(_ctx, id);
                    if (Convert.ToInt32(AD_tab_ID) > 0)
                    {
                        pf = MPrintFormat.CreateFromTable(_ctx, id, AD_tab_ID);
                    }
                    else
                    {
                        pf = MPrintFormat.CreateFromTable(_ctx, id);
                    }
                }

                rep = new ProcessReportInfo();
                pf.SetName(Env.TrimModulePrefix(pf.GetName()));
                if (nProcessInfo == null)
                {
                    PrintInfo info = new PrintInfo(pf.GetName(), pf.GetAD_Table_ID(), Record_ID);
                    info.SetDescription(_query == null ? "" : _query.GetInfo());
                    re = new ReportEngine_N(_ctx, pf, _query, info);
                }
                else
                {
                    ProcessInfo pi = new ProcessInfo().FromList(nProcessInfo);
                    pi.Set_AD_PrintFormat_ID(id);
                    ProcessCtl ctl = new ProcessCtl();
                    ctl.Process(pi, _ctx, out b, out re);
                    re.SetPrintFormat(pf);
                }

                re.GetView();
                if (pdf)
                {
                    rep.ReportFilePath = re.GetReportFilePath(true, out b);
                }
                else if (csv)
                {
                    rep.ReportFilePath = re.GetCSVPath(_ctx);
                }
                else
                {
                    rep.HTML = re.GetRptHtml().ToString();
                    rep.AD_PrintFormat_ID = re.GetPrintFormat().GetAD_PrintFormat_ID();
                    rep.ReportProcessInfo = null;
                    rep.Report            = re.CreatePDF();
                }
                // b = re.CreatePDF();
                //rep.Report = b;
                //rep.HTML = re.GetRptHtml().ToString();
                //rep.AD_PrintFormat_ID = re.GetPrintFormat().GetAD_PrintFormat_ID();
                //rep.ReportProcessInfo = null;
            }
            catch (Exception ex)
            {
                rep.IsError   = true;
                rep.ErrorText = ex.Message;
            }
            return(rep);
        }
        public GridReportInfo GenerateReport(Ctx _ctx, int id, List <string> queryInfo, Object code, bool isCreateNew, Dictionary <string, string> nProcessInfo, int pageNo, int AD_PInstance_ID, string fileType, int?nodeID, int?treeID, bool showSummary)
        {
            GridReportInfo res = new GridReportInfo();

            VIS.Models.PageSetting ps = new Models.PageSetting();
            parentIDs.Clear();
            ProcessReportInfo rep    = null;
            ReportEngine_N    re     = null;
            Query             _query = null;
            int    Record_ID         = 0;
            object AD_tab_ID         = 0;

            // _ctx.SetContext("#TimeZoneName", "India Standard Time");
            if (queryInfo.Count > 0 || AD_PInstance_ID > 0)
            {
                string tableName = queryInfo[0];
                if (AD_PInstance_ID > 0)
                {
                    if ((code).GetType() == typeof(int))        //	Form = one record
                    {
                        _query = Query.GetEqualQuery(tableName, ((int)code));
                    }
                    else
                    {
                        _query = Query.Get(_ctx, AD_PInstance_ID, tableName);
                    }
                }
                else
                {
                    string wherClause = queryInfo[1];
                    _query = new Query(tableName);

                    if (!string.IsNullOrEmpty(wherClause))
                    {
                        _query.AddRestriction(wherClause);
                    }
                }

                if (_query.GetRestrictionCount() == 1 && (code).GetType() == typeof(int))
                {
                    Record_ID = ((int)code);
                }

                if (nodeID > 0)
                {
                    GetChildNodesID(_ctx, Convert.ToInt32(nodeID), Convert.ToInt32(treeID));
                    MTree  tree          = new MTree(_ctx, Convert.ToInt32(treeID), null);
                    string nodeTableName = tree.GetNodeTableName();
                    _query.AddRestriction(" " + tableName + "." + tableName + "_ID  IN (SELECT NODE_ID FROM " + nodeTableName + "  WHERE Parent_ID IN (" + parentIDs.ToString() + ") OR NODE_ID IN (" + parentIDs + ")) ");

                    if (!showSummary)
                    {
                        _query.AddRestriction(" " + tableName + "." + "IsSummary= 'N'");
                    }
                }
            }
            else
            {
                if (nodeID > 0)
                {
                    MTree  tree      = new MTree(_ctx, Convert.ToInt32(treeID), null);
                    string tableName = MTable.GetTableName(_ctx, tree.GetAD_Table_ID());

                    _query = new Query(tableName);

                    GetChildNodesID(_ctx, Convert.ToInt32(nodeID), Convert.ToInt32(treeID));
                    string nodeTableName = tree.GetNodeTableName();
                    _query.AddRestriction(" " + tableName + "." + tableName + "_ID  IN (SELECT NODE_ID FROM " + nodeTableName + "  WHERE Parent_ID IN (" + parentIDs.ToString() + ")) ");


                    if (!showSummary)
                    {
                        _query.AddRestriction(" " + tableName + "." + "IsSummary= 'N'");
                    }
                }
            }

            if (_query == null)
            {
                _query = new Query();
                _query.AddRestriction(" 1 = 1");
            }



            if (queryInfo.Count > 2)
            {
                if (queryInfo[2] != null && queryInfo[2] != "" && Convert.ToInt32(queryInfo[2]) > 0)
                {
                    AD_tab_ID = Convert.ToInt32(queryInfo[2]);
                }
            }
            //Context _ctx = new Context(ctxDic);
            //Env.SetContext(_ctx);
            string lang = _ctx.GetAD_Language().Replace("_", "-");


            System.Globalization.CultureInfo original = System.Threading.Thread.CurrentThread.CurrentCulture;

            System.Threading.Thread.CurrentThread.CurrentCulture   = new System.Globalization.CultureInfo(lang);
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);



            byte[] b = null;
            try
            {
                MPrintFormat pf = null;

                if (!isCreateNew)
                {
                    bool isPFExist = Util.GetValueOfInt(DB.ExecuteScalar("SELECT Count(*) FROM AD_PrintFormat WHERE AD_PrintFormat_ID=" + id)) > 0;
                    if (isPFExist)
                    {
                        pf = MPrintFormat.Get(_ctx, id, true);
                    }
                    else
                    {
                        rep           = new ProcessReportInfo();
                        rep.ErrorText = "NoDocPrintFormat";
                        res.repInfo   = rep;
                        return(res);
                    }
                }
                else
                {
                    //   pf = MPrintFormat.CreateFromTable(_ctx, id);
                    if (Convert.ToInt32(AD_tab_ID) > 0)
                    {
                        pf = MPrintFormat.CreateFromTable(_ctx, id, AD_tab_ID, true);
                    }
                    else
                    {
                        pf = MPrintFormat.CreateFromTable(_ctx, id, true);
                    }
                }

                pf.IsGridReport = true;
                pf.PageNo       = pageNo;



                rep = new ProcessReportInfo();
                pf.SetName(Env.TrimModulePrefix(pf.GetName()));
                if (nProcessInfo == null || pageNo > 0 || (Util.GetValueOfInt(nProcessInfo["Record_ID"]) == 0 && Util.GetValueOfInt(nProcessInfo["Process_ID"]) == 0 &&
                                                           Util.GetValueOfInt(nProcessInfo["AD_PInstance_ID"]) == 0))
                {
                    PrintInfo info = new PrintInfo(pf.GetName(), pf.GetAD_Table_ID(), Record_ID);
                    info.SetDescription(_query == null ? "" : _query.GetInfo());
                    re = new ReportEngine_N(_ctx, pf, _query, info);
                }
                else
                {
                    ProcessInfo pi = new ProcessInfo().FromList(nProcessInfo);
                    pi.Set_AD_PrintFormat_ID(id);
                    ProcessCtl ctl = new ProcessCtl();
                    ctl.Process(pi, _ctx, out b, out re);
                    re.SetPrintFormat(pf);
                }
                lock (_lock)
                {
                    re.GetView();
                    if (fileType == ProcessCtl.ReportType_PDF)
                    {
                        rep.ReportFilePath = re.GetReportFilePath(true, out b);
                    }
                    else if (fileType == ProcessCtl.ReportType_CSV)
                    {
                        rep.ReportFilePath = re.GetCSVPath(_ctx);
                    }
                    else
                    {
                        rep.ReportFilePath    = re.GetReportFilePath(true, out b);
                        rep.HTML              = re.GetRptHtml().ToString();
                        rep.AD_PrintFormat_ID = re.GetPrintFormat().GetAD_PrintFormat_ID();
                        rep.ReportProcessInfo = null;
                        rep.Report            = re.CreatePDF();
                    }
                }

                ps.TotalPage   = pf.TotalPage;
                ps.CurrentPage = pageNo;
                // b = re.CreatePDF();
                //rep.Report = b;
                //rep.HTML = re.GetRptHtml().ToString();
                //rep.AD_PrintFormat_ID = re.GetPrintFormat().GetAD_PrintFormat_ID();
                //rep.ReportProcessInfo = null;
            }
            catch (Exception ex)
            {
                rep.IsError   = true;
                rep.ErrorText = ex.Message;
                log.Severe("ReportEngine_N_CreatePDF_" + ex.ToString());
            }
            //      VAdvantage.Classes.CleanUp.Get().Start();
            res.repInfo  = rep;
            res.pSetting = ps;
            return(res);
        }
        /// <summary>
        /// Process
        /// </summary>
        /// <returns>info</returns>
        protected override String DoIt()
        {
            log.Info("C_DunningRun_ID=" + _C_DunningRun_ID + ",R_MailText_ID=" + _R_MailText_ID
                     + ", EmailPDF=" + _EMailPDF + ",IsOnlyIfBPBalance=" + _IsOnlyIfBPBalance);

            //	Need to have Template
            if (_EMailPDF && _R_MailText_ID == 0)
            {
                throw new Exception("@NotFound@: @R_MailText_ID@");
            }
            String    subject = "";
            MMailText mText   = null;

            if (_EMailPDF)
            {
                mText = new MMailText(GetCtx(), _R_MailText_ID, Get_TrxName());
                if (_EMailPDF && mText.Get_ID() == 0)
                {
                    throw new Exception("@NotFound@: @R_MailText_ID@ - " + _R_MailText_ID);
                }
                subject = mText.GetMailHeader();
            }
            //
            MDunningRun run = new MDunningRun(GetCtx(), _C_DunningRun_ID, Get_TrxName());

            if (run.Get_ID() == 0)
            {
                throw new Exception("@NotFound@: @C_DunningRun_ID@ - " + _C_DunningRun_ID);
            }
            //	Print Format on Dunning Level
            MDunningLevel level  = new MDunningLevel(GetCtx(), run.GetC_DunningLevel_ID(), Get_TrxName());
            MPrintFormat  format = MPrintFormat.Get(GetCtx(), level.GetDunning_PrintFormat_ID(), false);

            MClient client = MClient.Get(GetCtx());

            int count  = 0;
            int errors = 0;

            MDunningRunEntry[] entries = run.GetEntries(false);
            for (int i = 0; i < entries.Length; i++)
            {
                MDunningRunEntry entry = entries[i];
                if (_IsOnlyIfBPBalance && Env.Signum(entry.GetAmt()) <= 0)
                {
                    continue;
                }
                //	To BPartner
                MBPartner bp = new MBPartner(GetCtx(), entry.GetC_BPartner_ID(), Get_TrxName());
                if (bp.Get_ID() == 0)
                {
                    AddLog(entry.Get_ID(), null, null, "@NotFound@: @C_BPartner_ID@ " + entry.GetC_BPartner_ID());
                    errors++;
                    continue;
                }
                //	To User
                MUser to = new MUser(GetCtx(), entry.GetAD_User_ID(), Get_TrxName());
                if (_EMailPDF)
                {
                    if (to.Get_ID() == 0)
                    {
                        AddLog(entry.Get_ID(), null, null, "@NotFound@: @AD_User_ID@ - " + bp.GetName());
                        errors++;
                        continue;
                    }
                    else if (to.GetEMail() == null || to.GetEMail().Length == 0)
                    {
                        AddLog(entry.Get_ID(), null, null, "@NotFound@: @EMail@ - " + to.GetName());
                        errors++;
                        continue;
                    }
                }
                //	BP Language
                //Language language =Language.getLoginLanguage();		//	Base Language
                Language language = Env.GetLoginLanguage(GetCtx());

                String tableName = "C_Dunning_Header_v";
                if (client.IsMultiLingualDocument())
                {
                    tableName += "t";
                    String AD_Language = bp.GetAD_Language();
                    if (AD_Language != null)
                    {
                        //language =language.getLanguage(AD_Language);
                    }
                }
                // format.SetLanguage(language);
                // format.SetTranslationLanguage(language);
                //	query
                Query query = new Query(tableName);
                query.AddRestriction("C_DunningRunEntry_ID", Query.EQUAL,
                                     entry.GetC_DunningRunEntry_ID());

                //	Engine
                //PrintInfo info = new PrintInfo(
                //    bp.GetName(),
                //    X_C_DunningRunEntry.Table_ID,
                //    entry.GetC_DunningRunEntry_ID(),
                //    entry.GetC_BPartner_ID());
                //info.SetDescription(bp.GetName() + ", Amt=" + entry.GetAmt());
                //ReportEngine re = new ReportEngine(GetCtx(), format, query, info);
                byte[] pdfReport;
                string reportPath = "";

                bool printed = false;
                if (_EMailPDF)
                {
                    EMail email = client.CreateEMail(to.GetEMail(), to.GetName(), null, null);
                    if (email == null || !email.IsValid())
                    {
                        AddLog(entry.Get_ID(), null, null,
                               "@RequestActionEMailError@ Invalid EMail: " + to);
                        errors++;
                        continue;
                    }
                    mText.SetUser(to);  //	variable context
                    mText.SetBPartner(bp);
                    mText.SetPO(entry);
                    String message = mText.GetMailText(true);
                    if (mText.IsHtml())
                    {
                        email.SetMessageHTML(mText.GetMailHeader(), message);
                    }
                    else
                    {
                        email.SetSubject(mText.GetMailHeader());
                        email.SetMessageText(message);
                    }

                    //
                    //File attachment = re.GetPDF(File.createTempFile("Dunning", ".pdf"));
                    //log.Fine(to + " - " + attachment);
                    //email.AddAttachment(attachment);
                    //
                    // Get report that is bound on the dunning entry tab of dunning run window.
                    int ReportProcess_ID = Util.GetValueOfInt(DB.ExecuteScalar("SELECT AD_Process_ID FROM ad_tab WHERE  export_id='VIS_634'"));
                    if (ReportProcess_ID > 0)
                    {
                        Common.Common Com             = new Common.Common();
                        Dictionary <string, object> d = Com.GetReport(GetCtx(), ReportProcess_ID, "C_DunningRunEntry", X_C_DunningRunEntry.Table_ID, entry.GetC_DunningRunEntry_ID(), 0, "", FileType, out pdfReport, out reportPath);
                        if (pdfReport != null)
                        {
                            email.AddAttachment(pdfReport, "Dunning" + entry.GetC_DunningRunEntry_ID() + ".pdf");
                        }
                    }
                    String    msg = email.Send();
                    MUserMail um  = new MUserMail(mText, entry.GetAD_User_ID(), email);
                    um.Save();
                    if (msg.Equals(EMail.SENT_OK))
                    {
                        AddLog(entry.Get_ID(), null, null,
                               bp.GetName() + " @RequestActionEMailOK@");
                        count++;
                        printed = true;
                    }
                    else
                    {
                        AddLog(entry.Get_ID(), null, null,
                               bp.GetName() + " @RequestActionEMailError@ " + msg);
                        errors++;
                    }
                }
                else
                {
                    //re.print();
                    count++;
                    printed = true;
                }
                if (printed)
                {
                    entry.SetProcessed(true);
                    entry.Save();
                    DunningLevelConsequences(level, entry);
                }
            }   //	for all dunning letters
            if (errors == 0)
            {
                run.SetProcessed(true);
                run.Save();
            }

            if (_EMailPDF)
            {
                return("@Sent@=" + count + " - @Errors@=" + errors);
            }
            return("@Printed@=" + count);
        }