private void cmbBuilding_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                cmbCustomer.SelectedIndexChanged -= cmbCustomer_SelectedIndexChanged;
                building  = buildings[cmbBuilding.SelectedIndex];
                customers = Controller.pastel.AddCustomers(building.Abbr, building.DataPath, true);
                cmbCustomer.DataSource = null;
                cmbCustomer.Items.Clear();
                cmbCustomer.DataSource            = customers;
                cmbCustomer.DisplayMember         = "accNumber";
                cmbCustomer.ValueMember           = "accNumber";
                cmbCustomer.SelectedIndex         = -1;
                cmbCustomer.SelectedIndexChanged += cmbCustomer_SelectedIndexChanged;

                stmtBuilding = new StatementBuilding(building.ID, building.Name, building.DataPath, building.Period, DateTime.Now, Controller.UserIsSheldon());
                stmt         = new Statement
                {
                    BuildingId        = building.ID,
                    pm                = building.PM,
                    bankName          = building.Bank_Name,
                    accName           = building.Acc_Name,
                    BankAccountNumber = building.Bank_Acc_Number,
                    branch            = building.Branch_Code,
                    DebtorEmail       = building.Debtor
                };
            }
            catch { }

            if (String.IsNullOrWhiteSpace(stmt.DebtorEmail))
            {
                Controller.HandleError("Debtor not configured on this building. Please check building configuration.");
            }
        }
        private void LoadBuildings()
        {
            String point = "0";
            String build = String.Empty;

            String query = "SELECT DISTINCT b.id, b.Building, b.DataPath, b.Period, '' as [Last Processed], b.pm, b.bankName, b.accName, b.bankAccNumber, b.branch, b.bank FROM tblBuildings AS b ";

            query += " INNER JOIN tblUserBuildings AS u ON b.id = u.buildingid WHERE u.userid = {0} ORDER BY b.Building";
            try
            {
                query = String.Format(query, userid.ToString());
            }
            catch
            {
                MessageBox.Show("query generator" + userid.ToString());
            }
            dsBuildings = dh.GetData(query, null, out status);
            if (dsBuildings != null && dsBuildings.Tables.Count > 0 && dsBuildings.Tables[0].Rows.Count > 0)
            {
                List <StatementBuilding> dataList = new List <StatementBuilding>();

                foreach (DataRow dr in dsBuildings.Tables[0].Rows)
                {
                    try
                    {
                        int      buildingId = (int)dr["id"];
                        String   building   = dr["Building"].ToString();
                        String   lpQuery    = String.Format("SELECT top(1) lastProcessed FROM tblStatements WHERE building = '{0}' ORDER BY lastProcessed DESC", building);
                        DataSet  dsLP       = dh.GetData(lpQuery, null, out status);
                        DateTime lastProcessed;
                        if (dsLP != null && dsLP.Tables.Count > 0 && dsLP.Tables[0].Rows.Count > 0)
                        {
                            lastProcessed = DateTime.Parse(dsLP.Tables[0].Rows[0]["lastProcessed"].ToString());
                        }
                        else
                        {
                            lastProcessed = DateTime.Now.AddYears(-1);
                        }
                        build = dr["Building"].ToString();
                        String            dp           = dr["DataPath"].ToString();
                        int               p            = int.Parse(dr["Period"].ToString());
                        StatementBuilding stmtBuilding = new StatementBuilding(buildingId, build, dp, p, lastProcessed, Controller.UserIsSheldon());

                        var existing = dataList.Where(a => a.DataPath == stmtBuilding.DataPath).FirstOrDefault();
                        if (existing == null)
                        {
                            dataList.Add(stmtBuilding);
                        }
                    }
                    catch (Exception ex)
                    {
                        Controller.HandleError(ex);
                    }
                }
                bs.DataSource = dataList;
            }
        }
 private void chkSelectAll_CheckedChanged(object sender, EventArgs e)
 {
     foreach (DataGridViewRow dvr in dgBuildings.Rows)
     {
         if (chkSelectAll.Checked)
         {
             StatementBuilding statementBuilding = dvr.DataBoundItem as StatementBuilding;
             if (statementBuilding != null && statementBuilding.Allowed)
             {
                 dvr.Cells[0].Value = true;
             }
         }
         else
         {
             dvr.Cells[0].Value = chkSelectAll.Checked;
         }
     }
 }
 private void dgBuildings_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
 {
     foreach (DataGridViewRow dvr in dgBuildings.Rows)
     {
         StatementBuilding statementBuilding = dvr.DataBoundItem as StatementBuilding;
         if (statementBuilding != null)
         {
             for (int i = 0; i < dgBuildings.ColumnCount; i++)
             {
                 if (statementBuilding.StatementAlreadyProcessed())
                 {
                     dvr.Cells[i].Style.BackColor = System.Drawing.Color.Red;
                 }
                 else
                 {
                     dvr.Cells[i].Style.BackColor = System.Drawing.Color.White;
                 }
             }
         }
     }
     dgBuildings.Refresh();
 }
        private void btnProcess_Click(object sender, EventArgs e)
        {
            _ProgressForm = frmProgress.ShowForm();

            List <string> statementFileList = new List <string>();

            this.Cursor = Cursors.WaitCursor;
            statements  = new Statements {
                statements = new List <Statement>()
            };
            Dictionary <String, bool> hasStatements = new Dictionary <string, bool>();

            foreach (DataGridViewRow dvr in dgBuildings.Rows)
            {
                if ((bool)dvr.Cells[0].Value)
                {
                    String buildingName = dvr.Cells[1].Value.ToString();
                    AddProgressString("Loading Building " + buildingName);

                    SetBuildingStatement(buildingName);
                    String datapath = dvr.Cells[5].Value.ToString();
                    int    period   = (int)dvr.Cells[6].Value;
                    if (dvr.Cells[2].Value == null)
                    {
                        MessageBox.Show("ishoa");
                    }

                    StatementBuilding strm = dvr.DataBoundItem as StatementBuilding;


                    List <Statement> bStatements = SetBuildings(strm.GetBuildingId(), buildingName, datapath, period, (bool)dvr.Cells[2].Value);

                    int     idx           = dvr.Index;
                    DataRow dr            = dsBuildings.Tables[0].Rows[idx];
                    String  pm            = dr["pm"].ToString();
                    String  bankName      = dr["bankName"].ToString();
                    String  accName       = dr["accName"].ToString();
                    String  bankAccNumber = dr["bankAccNumber"].ToString();
                    String  branch        = dr["branch"].ToString();
                    bool    isStd         = bankName.ToLower().Contains("standard");
                    foreach (Statement s in bStatements)
                    {
                        s.pm                = pm;
                        s.bankName          = bankName;
                        s.accName           = accName;
                        s.BankAccountNumber = bankAccNumber;
                        s.branch            = branch;
                        s.isStd             = isStd;
                        statements.statements.Add(s);
                    }
                }
            }
            PDF generator = new PDF(true);

            foreach (Statement stmt in statements.statements)
            {
                String fileName   = String.Empty;
                bool   canProcess = false;
                if (stmt.IsInTransfer && stmt.InTransferLetter != null)
                {
                    string folderPath = generator.StatementFolderPath;
                    fileName = Path.Combine(folderPath, String.Format("{0} - InTransfer - {1}{2}.pdf", stmt.AccNo.Replace(@"/", "-").Replace(@"\", "-"), DateTime.Now.ToString("dd-MMMM-yyyy"), ""));
                    if (!Directory.Exists(Path.GetDirectoryName(fileName)))
                    {
                        Directory.CreateDirectory(Path.GetDirectoryName(fileName));
                    }
                    if (File.Exists(fileName))
                    {
                        File.Delete(fileName);
                    }
                    File.WriteAllBytes(fileName, stmt.InTransferLetter);
                    canProcess = true;
                }
                else
                {
                    canProcess = generator.CreateStatement(stmt, stmt.BuildingName != "ASTRODON RENTALS" ? true : false, out fileName, stmt.isStd);
                }

                if (canProcess)
                {
                    #region Upload Letter

                    String actFileTitle = Path.GetFileNameWithoutExtension(fileName);
                    String actFile      = Path.GetFileName(fileName);

                    #endregion Upload Letter

                    string statementURL = string.Empty;

                    #region Upload Me
                    try
                    {
                        AddProgressString(stmt.BuildingName + ": " + stmt.accName + " - Upload statement to website");

                        string emailAddress = "";
                        if (stmt.email1 != null && stmt.email1.Length > 0)
                        {
                            emailAddress = stmt.email1[0];
                        }

                        statementURL = _ClientPortal.InsertStatement(stmt.BuildingId, stmt.AccNo, stmt.StmtDate, fileName, File.ReadAllBytes(fileName), emailAddress);
                    }
                    catch (Exception ex)
                    {
                        statementURL = "";
                        AddProgressString(stmt.BuildingName + ": " + stmt.accName + " - Error Upload statement to website " + ex.Message);
                    }
                    #endregion

                    #region Email Me
                    if (stmt.EmailMe)
                    {
                        if (!String.IsNullOrEmpty(fileName))
                        {
                            if (!hasStatements.ContainsKey(stmt.BuildingName))
                            {
                                hasStatements.Add(stmt.BuildingName, true);
                            }
                            if (Controller.user.id != 1 && !String.IsNullOrWhiteSpace(statementURL))
                            {
                                SetupEmail(stmt, fileName, statementURL);
                            }
                        }
                    }
                    #endregion

                    #region Print Me
                    if (stmt.PrintMe && Controller.user.id != 1)
                    {
                        if (!String.IsNullOrWhiteSpace(fileName))
                        {
                            AddProgressString(stmt.BuildingName + ": " + stmt.AccNo + " - Add Statement to List - " + Path.GetFileName(fileName));
                            statementFileList.Add(fileName);
                            // SendToPrinter(fileName, stmt.BuildingName , stmt.AccNo);
                        }
                        else
                        {
                            AddProgressString(stmt.BuildingName + ": " + stmt.AccNo + " - Error Printing Statement - file name blank");
                        }
                    }
                    #endregion

                    Application.DoEvents();
                }
                else
                {
                    AddProgressString(stmt.BuildingName + ": " + stmt.AccNo + " - ERROR Processing Statement");
                    Application.DoEvents();
                }
            }

            foreach (DataGridViewRow dvr in dgBuildings.Rows)
            {
                dvr.Cells[0].Value = false;
            }

            foreach (KeyValuePair <String, bool> hasStatement in hasStatements)
            {
                String query = "INSERT INTO tblStatements(building, lastProcessed) VALUES(@building, @lastProcessed)";
                Dictionary <String, Object> sqlParms = new Dictionary <string, object>();
                sqlParms.Add("@building", hasStatement.Key);
                sqlParms.Add("@lastProcessed", DateTime.Now);
                dh.SetData(query, sqlParms, out status);
            }

            CombinePDFsAndPrint(statementFileList);

            this.Cursor = Cursors.Arrow;

            _ProgressForm.Focus();
            _ProgressForm.ProcessComplete();
            _ProgressForm = null;
        }