private WebReportData GetBaseData(Building building)
        {
            WebReportData wrd = new WebReportData();

            wrd.building = building.Name;
            wrd.picture  = null;
            var logoData = new AstrodonClientPortal(SqlDataHandler.GetClientPortalConnectionString()).GetBuildingImage(building.ID);

            if (logoData != null)
            {
                using (var memLogo = new MemoryStream(logoData))
                {
                    Image img = Image.FromStream(memLogo);
                    wrd.picture = img;
                }
            }

            //String status;
            //DataSet dsPic = mysql.GetData("SELECT image FROM tt_content WHERE pid = " + building.pid + " AND CType = 'image'", null, out status);
            //if (dsPic != null && dsPic.Tables.Count > 0 && dsPic.Tables[0].Rows.Count > 0)
            //{
            //    String picture = dsPic.Tables[0].Rows[0]["image"].ToString();
            //    Classes.Sftp sftpClient = new Classes.Sftp(String.Empty, true);
            //    sftpClient.WorkingDirectory = "/srv/www/htdocs/uploads/pics";
            //    String thisDirectory = AppDomain.CurrentDomain.BaseDirectory;
            //    String file1 = picture.Replace(Path.GetFileNameWithoutExtension(picture), Path.GetFileNameWithoutExtension(picture) + "_web1");
            //    String tempPath = Path.Combine(thisDirectory, file1);
            //    bool success = sftpClient.Download(tempPath, picture, false, out status);
            //    if (!success)
            //    {
            //        MessageBox.Show(status);
            //        wrd.picture = null;
            //    }
            //    else
            //    {
            //        Image img = Image.FromFile(file1);
            //        wrd.picture = img;
            //    }
            //}
            //else
            //{
            //    wrd.picture = null;
            //}

            List <String> folders   = LoadFolders(building.webFolder);
            List <String> rootFiles = ListFiles(building.webFolder, String.Empty);

            wrd.files.Add("Root", rootFiles);
            foreach (String folder in folders)
            {
                try
                {
                    wrd.files.Add(folder, ListFiles(building.webFolder, folder));
                }
                catch (Exception ex) { Controller.HandleError(ex); }
            }
            return(wrd);
        }
        /*   private void UploadToWeb(byte[] data, string filename,string description, List<EmailList> sendToList)
         * {
         *     if (data != null)
         *     {
         *         var clientPortal = new AstrodonClientPortal(SqlDataHandler.GetClientPortalConnectionString());
         *         foreach (string customerAccount in sendToList.Select(a => a.AccNumber).Distinct())
         *         {
         *             try
         *             {
         *                 clientPortal.UploadUnitDocument(DocumentCategoryType.Letter,DateTime.Today
         *                     , building.ID, customerAccount,  filename, description, data);
         *             }catch(Exception ex)
         *             {
         *                 Controller.HandleError(ex);
         *             }
         *         }
         *     }
         * }
         */

        private void SendMail(int msgID)
        {
            var clientPortal = new AstrodonClientPortal(SqlDataHandler.GetClientPortalConnectionString());

            String mailQuery = "SELECT msg.id, msg.fromAddress, b.Code, b.DataPath, msg.incBCC, msg.bccAddy, msg.subject, msg.message, msg.billBuilding, msg.billAmount, msg.buildingID FROM tblMsg AS msg ";

            mailQuery += " INNER JOIN tblBuildings AS b ON msg.buildingID = b.id WHERE (msg.queue = 'False') AND msg.id = " + msgID.ToString();
            SqlDataHandler dh     = new SqlDataHandler();
            String         status = String.Empty;
            DataSet        ds     = dh.GetData(mailQuery, null, out status);

            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    int buildingId = (int)dr["buildingID"];

                    String  bCode           = dr["Code"].ToString();
                    String  dataPath        = dr["DataPath"].ToString();
                    String  fromAddress     = dr["fromAddress"].ToString();
                    bool    incBCC          = bool.Parse(dr["incBCC"].ToString());
                    String  bccAddy         = dr["bccAddy"].ToString();
                    String  subject         = dr["subject"].ToString();
                    String  message         = dr["message"].ToString();
                    bool    billBuilding    = bool.Parse(dr["billBuilding"].ToString());
                    double  billAmount      = double.Parse(dr["billAmount"].ToString());
                    String  attachmentQuery = "SELECT Name, Data FROM tblMsgData WHERE msgID = " + msgID.ToString();
                    DataSet dsAttachment    = dh.GetData(attachmentQuery, null, out status);
                    Dictionary <String, byte[]> attachments = new Dictionary <string, byte[]>();
                    if (dsAttachment != null && dsAttachment.Tables.Count > 0 && dsAttachment.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow drA in dsAttachment.Tables[0].Rows)
                        {
                            if (!attachments.ContainsKey(drA["Name"].ToString()))
                            {
                                attachments.Add(drA["Name"].ToString(), (byte[])drA["Data"]);
                            }
                        }
                    }
                    String billableCustomersQuery = "SELECT distinct accNo FROM tblMsgRecipients WHERE billCustomer = 'True' and msgID = " + msgID.ToString();

                    DataSet billableCustomers = dh.GetData(billableCustomersQuery, null, out status);

                    String  allRecipientsQuery = "SELECT id, accNo, recipient FROM tblMsgRecipients WHERE msgID = " + msgID.ToString();
                    DataSet receivers          = dh.GetData(allRecipientsQuery, null, out status);

                    Dictionary <String, bool>   emails = new Dictionary <string, bool>();
                    Dictionary <string, string> bulkMailAttachments = null;


                    if (receivers != null && receivers.Tables.Count > 0 && receivers.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow rrece in receivers.Tables[0].Rows)
                        {
                            bulkMailAttachments = new Dictionary <string, string>();

                            String[] emailAddys   = rrece["recipient"].ToString().Split(new String[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
                            string   accNumber    = rrece["accNo"].ToString();
                            string   emailAddress = string.Empty;
                            if (emailAddys.Length > 0)
                            {
                                emailAddress = emailAddys[0];
                            }
                            foreach (string file in attachments.Keys.ToList())
                            {
                                var data = attachments[file];
                                if (data != null && data.Length > 0)
                                {
                                    string url = clientPortal.UploadUnitDocument(DocumentCategoryType.Letter, DateTime.Today, buildingId, accNumber, file, "Correspondence", data, emailAddress);
                                    bulkMailAttachments.Add(file, url);
                                }
                            }

                            bool success = Email.EmailProvider.SendBulkMail(fromAddress, emailAddys, subject, message, bulkMailAttachments);

                            String updateQuery = "UPDATE tblMsgRecipients SET sentDate = getdate() WHERE id = " + rrece["id"].ToString();
                            dh.SetData(updateQuery, null, out status);
                            if (!emails.ContainsKey(rrece["accNo"].ToString()))
                            {
                                emails.Add(rrece["accNo"].ToString(), success);
                            }
                        }
                    }
                    message += Environment.NewLine + Environment.NewLine;
                    message += "Send status:" + Environment.NewLine + Environment.NewLine;
                    var builder = new System.Text.StringBuilder();
                    builder.Append(message);
                    foreach (KeyValuePair <String, bool> statuses in emails)
                    {
                        builder.Append(statuses.Key + " = " + statuses.Value.ToString() + Environment.NewLine);
                    }
                    message = builder.ToString();
                    if (incBCC)
                    {
                        String[] bccs = bccAddy.Split(new String[] { ";" }, StringSplitOptions.None);

                        Email.EmailProvider.SendBulkMail(fromAddress, bccs, subject, message, bulkMailAttachments);
                    }
                }
            }
        }
Exemple #3
0
        private void btnSendNow_Click(object sender, EventArgs e)
        {
            if (txtEmail.Text != "" && txtSubject.Text != "" && txtMessage.Text != "" && cmbCustomer.SelectedIndex >= 0 && cmbBuilding.SelectedIndex >= 0)
            {
                var    customer      = customers[cmbCustomer.SelectedIndex];
                var    building      = buildings[cmbBuilding.SelectedIndex];
                string trusteeEmails = "";

                if (cbCCTrustees.Checked)
                {
                    using (var ctx = SqlDataHandler.GetDataContext())
                    {
                        var emls = ctx.CustomerSet.Where(a => a.BuildingId == building.ID &&
                                                         a.IsTrustee &&
                                                         a.EmailAddress1 != "").Select(a => a.EmailAddress1).ToList();
                        foreach (var s in emls)
                        {
                            if (!string.IsNullOrWhiteSpace(s))
                            {
                                if (!string.IsNullOrWhiteSpace(trusteeEmails))
                                {
                                    trusteeEmails = trusteeEmails + ";" + s;
                                }
                                else
                                {
                                    trusteeEmails = s;
                                }
                            }
                        }
                    }
                }

                String[] emails = txtEmail.Text.Split(new String[] { ";" }, StringSplitOptions.None);

                var clientPortal = new AstrodonClientPortal(SqlDataHandler.GetClientPortalConnectionString());

                Dictionary <string, string> attachmentsData = new Dictionary <string, string>();
                foreach (Object obj in lstAttachments.Items)
                {
                    string fileName = obj.ToString();
                    if (File.Exists(fileName))
                    {
                        attachmentsData.Add(Path.GetFileName(fileName),
                                            clientPortal.UploadUnitDocument(DocumentCategoryType.Letter, DateTime.Today, building.ID, customer.accNumber, txtSubject.Text, fileName, txtEmail.Text));
                    }
                }


                string cc = txtCC.Text;
                if (!string.IsNullOrWhiteSpace(cc) && !string.IsNullOrWhiteSpace(trusteeEmails))
                {
                    cc = ";" + trusteeEmails;
                }
                else
                {
                    cc = trusteeEmails;
                }


                if (Email.EmailProvider.SendDirectMail(building.ID, customer.accNumber,
                                                       emails, cc, txtBCC.Text, txtSubject.Text, txtMessage.Text, attachmentsData))
                {
                    MessageBox.Show("Message sent");
                }
                else
                {
                    MessageBox.Show("Message not sent");
                }
            }
            else
            {
                if (txtEmail.Text == "")
                {
                    MessageBox.Show("Please enter email address");
                }
                else if (txtSubject.Text == "")
                {
                    MessageBox.Show("Please enter subject");
                }
                else if (txtMessage.Text == "")
                {
                    MessageBox.Show("Please enter message");
                }
            }
        }
        private void SendCalenderInvite(CalendarPrintItem entry)
        {
            if (string.IsNullOrWhiteSpace(entry.PMEmail))
            {
                Controller.HandleError("Email address not found for " + entry.PM);
                return;
            }

            var calendarInvite = CreateCalendarInvite(entry.BuildingName + " - " + entry.Event, "", entry.Venue, entry.EventDate, entry.EventToDate != null ? entry.EventToDate.Value : entry.EventDate.AddHours(2));
            Dictionary <string, byte[]> attachments = new Dictionary <string, byte[]>();

            attachments.Add("Appointment.ics", calendarInvite);
            string subject = entry.InviteSubject;

            if (String.IsNullOrWhiteSpace(subject))
            {
                subject = entry.BuildingName + " - " + entry.Event;
            }

            string bodyContent = entry.InviteBody;

            if (String.IsNullOrWhiteSpace(bodyContent))
            {
                bodyContent = "";
            }

            string bccEmail = entry.BCCEmailAddress;

            if (bccEmail == string.Empty)
            {
                bccEmail = null;
            }

            //add aditional attachments
            using (var context = SqlDataHandler.GetDataContext())
            {
                var attach = context.CalendarEntryAttachmentSet.Where(a => a.BuildingCalendarEntryId == entry.Id).ToList();
                foreach (var a in attach)
                {
                    attachments.Add(a.FileName, a.FileData);
                }

                List <string> toAddress = new List <string>();
                toAddress.Add(entry.PMEmail);
                if (entry.EventyType == CalendarEntryType.Staff)
                {
                    var qInvite = from i in context.CalendarUserInviteSet
                                  where i.CalendarEntryId == entry.Id
                                  select i.User.email;

                    toAddress.AddRange(qInvite.ToList());
                }

                if (!Email.EmailProvider.SendCalendarInvite(entry.PMEmail, toAddress.Distinct().ToArray(), subject, bodyContent, attachments, bccEmail))
                {
                    Controller.HandleError("Error seding email ", "Email error");
                }

                if (entry.NotifyTrustees && entry.EventyType == CalendarEntryType.Financial)
                {
                    var customers    = Controller.pastel.AddCustomers(entry.BuildingAbreviation, entry.BuildingDataPath, true);
                    var dbCustomers  = context.CustomerSet.Where(a => a.BuildingId == entry.BuildingId && a.IsTrustee == true).ToList();
                    var clientPortal = new AstrodonClientPortal(SqlDataHandler.GetClientPortalConnectionString());

                    if (dbCustomers.Count() > 0 && Controller.AskQuestion("Are you sure you want to send the invite to " + dbCustomers.Count().ToString() + " trustees?"))
                    {
                        //upload building documents

                        Dictionary <string, string> trusteeAttachmentLinks = new Dictionary <string, string>();
                        foreach (var fileName in attachments.Keys.ToList())
                        {
                            if (fileName != "Appointment.ics")
                            {
                                var url = clientPortal.UploadBuildingDocument(DocumentCategoryType.PrivilegedCorrespondence, DateTime.Today, entry.BuildingId.Value, Path.GetFileNameWithoutExtension(fileName), fileName, attachments[fileName], "From Email");
                                trusteeAttachmentLinks.Add(fileName, url);
                            }
                        }

                        foreach (var dbCustomer in dbCustomers)
                        {
                            var trustee = customers.Where(a => a.accNumber == dbCustomer.AccountNumber).FirstOrDefault();
                            if (trustee != null)
                            {
                                if (trustee.Email != null && trustee.Email.Length > 0)
                                {
                                    if (!Email.EmailProvider.SendTrusteeCalendarInvite(entry.PMEmail, trustee.Email, subject, bodyContent, attachments, bccEmail, trusteeAttachmentLinks))
                                    {
                                        Controller.HandleError("Error seding email", "Email error");
                                    }
                                }
                            }
                        }

                        var itm = context.BuildingCalendarEntrySet.Single(a => a.id == entry.Id);
                        itm.TrusteesNotified   = true;
                        entry.TrusteesNotified = true;
                        context.SaveChanges();
                        BindDataGrid();
                    }
                }
            }
        }