public void Renders_all()
        {
            // ARRANGE
            var expected = "<strong>bob</strong>";
            var t = new Template();
            t.Content.Subject = "<strong>{{name}}</strong>";
            t.Content.Body = "<strong>{{name}}</strong>";
            t.Content.TextBody = "<strong>{{name}}</strong>";

            t.Content.SummaryBody = "<strong>{{name}}</strong>";
            t.Content.SummaryHeader = "<strong>{{name}}</strong>";
            t.Content.SummaryFooter = "<strong>{{name}}</strong>";
            t.Content.SummarySubject = "<strong>{{name}}</strong>";
            t.Content.SummaryTextBody = "<strong>{{name}}</strong>";
            t.Content.SummaryTextHeader = "<strong>{{name}}</strong>";
            t.Content.SummaryTextFooter = "<strong>{{name}}</strong>";
   
            var r = new HandlebarsRenderer(t);

            // ACT
            var mail = new Models.Mail();
            r.Render(mail, new { name = "bob" });

            // ASSERT
            Assert.AreEqual(expected, mail.Body);
            Assert.AreEqual(expected, mail.Subject);
            Assert.AreEqual(expected, mail.SummaryBody);
            Assert.AreEqual(expected, mail.SummaryFooter);
            Assert.AreEqual(expected, mail.SummaryHeader);
            Assert.AreEqual(expected, mail.SummarySubject);
            Assert.AreEqual(expected, mail.TextBody);
            Assert.AreEqual(expected, mail.SummaryTextBody);
            Assert.AreEqual(expected, mail.SummaryTextFooter);
            Assert.AreEqual(expected, mail.SummaryTextHeader);
        }
Exemple #2
0
 // GET: Mail/Edit/5
 public ActionResult Edit(int id)
 {
     Models.Mail mail = db.Mails.Find(id);
     if (mail != null)
     {
         return(View(mail));
     }
     return(RedirectToAction("Index"));
 }
Exemple #3
0
        public ActionResult Create(MailViewModel mailVM)
        {
            try
            {
                User        user = db.Users.Find(mailVM.SelectedValue);
                Models.Mail mail = new Models.Mail
                {
                    Subject = mailVM.Subject,
                    To      = user,
                    Body    = mailVM.Body
                };
                if (ModelState.IsValid)
                {
                    db.Mails.Add(mail);
                    db.SaveChanges();
                    send(mail.Subject, mail.To);
                    //var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
                    //MailMessage message = new MailMessage();
                    ////message.IsBodyHtml = true;
                    //// message.Priority = MailPriority.High;
                    //message.Subject = mail.Subject;
                    //message.To.Add(mail.To.Email);  // replace with valid value
                    //message.From = new System.Net.Mail.MailAddress("*****@*****.**");  // replace with valid value
                    //                                                                         //  message.Subject = "Your email subject";
                    //message.Body = string.Format(body, "ontonomia", "*****@*****.**", mail.Body);
                    ////  message.IsBodyHtml = false;

                    //SmtpClient smtp = new SmtpClient(_server);

                    ////smtp.Host = _server;
                    //smtp.Port = 465;
                    //smtp.Credentials = new System.Net.NetworkCredential(_user, _password);

                    //smtp.EnableSsl = true;
                    //smtp.Timeout = 20000;
                    //smtp.Send(message);
                    return(RedirectToAction("Index"));
                }

                return(View(mailVM));
            }
            catch (Exception)
            {
                return(View(mailVM));
            }
        }
Exemple #4
0
 public ActionResult Edit(Models.Mail mail)
 {
     try
     {
         if (ModelState.IsValid)
         {
             db.Entry(mail).State = EntityState.Modified;
             db.SaveChanges();
             return(RedirectToAction("Index"));
         }
         return(View(mail.MailId));
     }
     catch
     {
         return(View());
     }
 }
        public void DifferentCase_ThrowsException()
        {
            // ARRANGE
            var     subject  = new DefaultReceiverMapper();
            var     mail     = new Models.Mail();
            dynamic receiver = new ExpandoObject();

            receiver.FuLlName = "Markus Boxington";
            receiver.eMAIl    = "*****@*****.**";

            // ACT
            subject.Map(receiver, mail);

            // ASSERT
            Assert.AreEqual("*****@*****.**", mail.Receiver.Address);
            Assert.AreEqual("Markus Boxington", mail.Receiver.DisplayName);
        }
        public void Basic()
        {
            // ARRANGE
            var     subject  = new DefaultReceiverMapper();
            var     mail     = new Models.Mail();
            dynamic receiver = new ExpandoObject();

            receiver.fullname = "Markus Boxington";
            receiver.email    = "*****@*****.**";

            // ACT
            subject.Map(receiver, mail);

            // ASSERT
            Assert.AreEqual("*****@*****.**", mail.Receiver.Address);
            Assert.AreEqual("Markus Boxington", mail.Receiver.DisplayName);
        }
        public void DifferentCase_ThrowsException()
        {
            // ARRANGE
            var subject = new DefaultReceiverMapper();
            var mail = new Models.Mail();
            dynamic receiver = new ExpandoObject();
            receiver.FuLlName = "Markus Boxington";
            receiver.eMAIl = "*****@*****.**";

            // ACT
            subject.Map(receiver, mail);

            // ASSERT
            Assert.AreEqual("*****@*****.**", mail.Receiver.Address);
            Assert.AreEqual("Markus Boxington", mail.Receiver.DisplayName);

        }
        public void Basic()
        {
            // ARRANGE
            var subject = new DefaultReceiverMapper();
            var mail = new Models.Mail();
            dynamic receiver = new ExpandoObject();
            receiver.fullname = "Markus Boxington";
            receiver.email = "*****@*****.**";

            // ACT
            subject.Map(receiver, mail);

            // ASSERT
            Assert.AreEqual("*****@*****.**", mail.Receiver.Address);
            Assert.AreEqual("Markus Boxington", mail.Receiver.DisplayName);

        }
Exemple #9
0
 public ActionResult Delete(int id, Models.Mail mail)
 {
     try
     {
         Models.Mail deletedMail = db.Mails.Find(id);
         if (deletedMail != null)
         {
             db.Mails.Remove(deletedMail);
             db.SaveChanges();
             return(RedirectToAction("Index"));
         }
         return(View(id));
     }
     catch
     {
         return(View());
     }
 }
Exemple #10
0
        public void Initialization(Models.Mail mail, out MailMessage message, out SmtpClient client)
        {
            message              = new MailMessage();
            message.IsBodyHtml   = mail.IsBodyHtml;
            message.BodyEncoding = Encoding.GetEncoding("UTF-8");
            message.From         = new MailAddress(mail.FromMail, mail.DisplayName);
            message.To.Add(new MailAddress(mail.ToMail));
            message.Subject  = mail.Subject;
            message.Body     = mail.Body;
            message.Priority = MailPriority.High;

            client                       = new SmtpClient();
            client.EnableSsl             = mail.IsUsingSSL;
            client.Host                  = mail.SMTPServer;
            client.Port                  = mail.SMTPPort;
            client.UseDefaultCredentials = false;
            client.Credentials           = new NetworkCredential(mail.Username, mail.Password);
        }
        public void WorksWithBoth()
        {
            // ARRANGE
            var mock = new Mock<IConfiguration>();
            mock.Setup(m => m.GetValue(DefaultSenderConfiguration.APP_KEY_FROM_ADDRESS))
                .Returns("*****@*****.**");
            mock.Setup(m => m.GetValue(DefaultSenderConfiguration.APP_KEY_FROM_NAME))
                .Returns("John Doe");

            var subject = new DefaultSenderConfiguration(mock.Object);
            var mail = new Models.Mail();

            // ACT
            subject.Configure(mail);

            // ASSERT
            Assert.AreEqual("*****@*****.**", mail.Sender.Address);
            Assert.AreEqual("John Doe", mail.Sender.DisplayName);

        }
        public void Renders_Complex()
        {
            // ARRANGE
            var expected = "<strong>alice</strong>";
            var t = new Template();
            t.Content.Body = "<strong>{{name.sub}}</strong>";
            var r = new HandlebarsRenderer(t);

            // ACT
            var mail = new Models.Mail();

            r.Render(mail, new
            {
                name = new
                    {
                        sub = "alice"
                    }
            });

            // ASSERT
            Assert.AreEqual(expected, mail.Body);
        }
        public void SendConfirmLink(Data.Models.User registerUser, string templatePath)
        {
            StreamReader  streamReader  = new StreamReader(templatePath);
            StringBuilder stringBuilder = new StringBuilder(streamReader.ReadToEnd());

            streamReader.Close();
            stringBuilder.Replace(@"[ActiveLink]", "https://google.com");

            var mail = new Models.Mail();

            mail.FromMail    = Ultilities.AppInfor.AppGlobal.FromMail;
            mail.DisplayName = Ultilities.AppInfor.AppGlobal.RegisterMailDisplayName;
            mail.Subject     = Ultilities.AppInfor.AppGlobal.RegisterMailSubject;
            mail.SMTPServer  = Ultilities.AppInfor.AppGlobal.SMTPServer;
            mail.SMTPPort    = Ultilities.AppInfor.AppGlobal.SMTPPort;
            mail.Username    = Ultilities.AppInfor.AppGlobal.MailUserName;
            mail.Password    = Ultilities.AppInfor.AppGlobal.MailPassword;
            mail.IsUsingSSL  = true;
            mail.IsBodyHtml  = true;
            mail.Body        = stringBuilder.ToString();
            mail.ToMail      = registerUser.Email;
            this.Send(mail);
        }
 public Task SendConfirmLinkAsync(Models.Mail mail)
 {
     throw new NotImplementedException();
 }
        public string SaveLogin()
        {
            using (Models.PhonesDataContext model = new Models.PhonesDataContext())
            {
                try {
                    var    content = Request.Content.ReadAsByteArrayAsync().Result;
                    string res     = System.Text.Encoding.UTF8.GetString(content);
                    res = res.Replace(@"\", @"\\");

                    var inv = JsonConvert.DeserializeObject <Models.CompInvent>(res);

                    model.EventLogs.InsertOnSubmit(new Models.EventLog()
                    {
                        Date        = DateTime.Now,
                        Description = res,
                        Name        = @"Json Request"
                    });
                    model.SubmitChanges();

                    foreach (string ip1 in inv.ip)
                    {
                        if (ip1.StartsWith("10."))
                        {
                            var          DomainUser = Lib.ADAuth.GetUserFromAD(inv.sAMAccountName);
                            Models.Login l          = new Models.Login()
                            {
                                sAMAccountName                     = inv.sAMAccountName,
                                IPAddress                          = ip1,
                                Date                               = DateTime.Now,
                                OsVersion                          = inv.osversion,
                                Email                              = DomainUser.email != null ? DomainUser.email : "",
                                FIO                                = DomainUser.FIO != null ? DomainUser.FIO : "",
                                DameWare                           = bool.Parse(inv.dameware),
                                CPU_freq                           = inv.CPU_freq != null?int.Parse(inv.CPU_freq) : 0,
                                                            GPU_HR = inv.GPU_HR != null?int.Parse(inv.GPU_HR) : 0,
                                                                         GPU_NAME = inv.GPU_NAME,
                                                                         CPU_name = inv.CPU_name,
                                                                         GPU_RAM  = inv.GPU_RAM != null?int.Parse(inv.GPU_RAM) : 0,
                                                                                        CompName                      = inv.compname,
                                                                                        errors                        = inv.errors,
                                                                                        osarch                        = inv.osarch,
                                                                                        RAM                           = inv.RAM != null?int.Parse(inv.RAM) : 0,
                                                                                                               GPU_VR = inv.GPU_VR != null?int.Parse(inv.GPU_VR) : 0,
                                                                                                                            ProfileSize = inv.userprofilesize,
                                                                                                                            ProfileName = inv.userprofile
                            };
                            model.Logins.InsertOnSubmit(l);
                            model.SubmitChanges();

                            int    TotalDiskSize   = 0;
                            int    TotalFreeSize   = 0;
                            string DriveInterfaces = "";
                            int    DrivesCount     = 0;

                            ///---Отбрабатываю данные по почте
                            if (inv.bases != null && inv.bases.Count > 0)
                            {
                                foreach (var b in inv.bases)
                                {
                                    Models.OdinC odinC = new Models.OdinC()
                                    {
                                        Info = b.Info,
                                        Name = b.Name
                                    };
                                    l.OdinCs.Add(odinC);
                                    model.SubmitChanges();
                                }
                            }

                            ///---Обрабатываю данные по почте
                            if (inv.mail != null && inv.mail.Count > 0)
                            {
                                int TotalMailSize = 0;
                                foreach (var m in inv.mail)
                                {
                                    var mail = new Models.Mail()
                                    {
                                        lable = m.lable,
                                        eml   = string.IsNullOrEmpty(m.eml) ? 0: int.Parse(m.eml),
                                        dbx   = string.IsNullOrEmpty(m.dbx) ? 0: int.Parse(m.dbx)
                                    };
                                    TotalMailSize += mail.eml.Value;
                                    TotalMailSize += mail.dbx.Value;

                                    l.Mails.Add(mail);
                                    model.SubmitChanges();
                                }
                                l.TotalMailSize = TotalMailSize;
                                model.SubmitChanges();
                            }

                            ///---Сохраняю физические диски
                            if (inv.HDDs != null && inv.HDDs.Count > 0)
                            {
                                foreach (var dd in inv.HDDs)
                                {
                                    var diskDrive = new Models.DiskDrive()
                                    {
                                        Interface = dd.disc_interface,
                                        Size      = int.Parse(dd.disc_size),
                                        Name      = dd.disc_name
                                    };
                                    l.DiskDrives.Add(diskDrive);
                                    model.SubmitChanges();

                                    ///---Сохраняю логические диски
                                    foreach (var ld in dd.LogicalDiscs)
                                    {
                                        TotalDiskSize += int.Parse(ld.Size);
                                        TotalFreeSize += int.Parse(ld.Free);

                                        var lDisk = new Models.LogicalDisk();
                                        lDisk.Free  = int.Parse(ld.Free);
                                        lDisk.Size  = int.Parse(ld.Size);
                                        lDisk.Label = ld.Lable;
                                        diskDrive.LogicalDisks.Add(lDisk);
                                        model.SubmitChanges();
                                    }

                                    DrivesCount     += 1;
                                    DriveInterfaces += dd.disc_interface + ",";
                                }

                                l.TotalFreeSize   = TotalFreeSize;
                                l.TotalHDDSize    = TotalDiskSize;
                                l.DriveCount      = DrivesCount;
                                l.DriveInterfaces = DriveInterfaces;
                                model.SubmitChanges();
                            }

                            ///---Сохраняю принтеры
                            if (inv.Printers != null && inv.Printers.Count > 0)
                            {
                                foreach (var p in inv.Printers)
                                {
                                    l.Printers.Add(new Models.Printer()
                                    {
                                        Default   = p.Default,
                                        Network   = p.Network,
                                        Server    = p.Server,
                                        ShareName = p.ShareName,
                                        Name      = p.Name
                                    });

                                    if (p.Default.ToLower() == "true")
                                    {
                                        l.DefaultPrinterName = p.Name;
                                    }

                                    model.SubmitChanges();
                                }
                            }

                            ///---Сохраняю программы
                            if (inv.programs != null && inv.programs.Count > 0)
                            {
                                foreach (var pr in inv.programs)
                                {
                                    l.UserPrograms.Add(new Models.UserProgram()
                                    {
                                        Name = pr.Name
                                    });
                                }
                                model.SubmitChanges();
                            }

                            ///---Сохраняю файлы
                            if (inv.allfiles != null && inv.allfiles.Count > 0)
                            {
                                foreach (var f in inv.allfiles)
                                {
                                    l.UserFiles.Add(new Models.UserFile()
                                    {
                                        Ext   = f.Ext,
                                        Lable = f.Lable,
                                        Size  = f.Size
                                    });
                                }
                                model.SubmitChanges();
                            }
                        }
                    }
                    model.SubmitChanges();

                    //List<string> patval = res.Trim().Trim('}').Trim('{').Split(',').ToList();

                    //string sAMAccountName = "";
                    //List<string> ip = new List<string>();
                    //string osversion = "";
                    //string dameware = "";
                    //string osarch = "";
                    //string RAM = "";
                    //string CPU_name = "";
                    //string CPU_freq = "";
                    //string GPU_NAME = "";
                    //string GPU_RAM = "";
                    //string GPU_HR = "";
                    //string GPU_VR = "";
                    //string HDDS = "";
                    //string error = "";
                    //bool bdameware = false;



                    //foreach (string pv in patval)
                    //{
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "samaccountname") sAMAccountName = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "osversion") osversion = pv.Split(':')[1].Trim().Trim('"').Trim('\'');

                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "osarch") osarch = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "ram") RAM = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "cpu_name") CPU_name = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "cpu_freq") CPU_freq = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "gpu_name") GPU_NAME = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "gpu_ram") GPU_RAM = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "gpu_hr") GPU_HR = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "gpu_vr") GPU_VR = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "error") error = pv.Split(':')[1].Trim().Trim('"').Trim('\'');


                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "hdds")
                    //    {
                    //        HDDS = "";
                    //        List<string> rips = pv.Split(':')[1].Trim().Trim('[').Trim(']').Split(',').ToList();
                    //        foreach (string rip in rips)
                    //        {
                    //            HDDS += rip.Trim('"').Trim('\'');
                    //        }
                    //    }

                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "ip")
                    //    {
                    //        List<string> rips = pv.Split(':')[1].Trim().Trim('[').Trim(']').Split(',').ToList();
                    //        foreach (string rip in rips)
                    //        {
                    //            ip.Add(rip.Trim('"').Trim('\''));
                    //        }
                    //    }

                    //    if (pv.Split(':')[0].Trim().ToLower().Trim('"').Trim('\'') == "dameware")
                    //    {
                    //        dameware = pv.Split(':')[1].Trim().Trim('"').Trim('\'');
                    //        bdameware = bool.Parse(dameware);
                    //    }


                    //}


                    //foreach (string ip1 in ip)
                    //{
                    //    var DomainUser = Lib.ADAuth.GetUserFromAD(sAMAccountName);
                    //    model.Logins.InsertOnSubmit(new Models.Login()
                    //    {
                    //        sAMAccountName = sAMAccountName,
                    //        IPAddress = ip1,
                    //        Date = DateTime.Now,
                    //        OsVersion = osversion,
                    //        Email = DomainUser.email != null? DomainUser.email:"",
                    //        FIO = DomainUser.FIO != null ? DomainUser.FIO : "",
                    //        DameWare = bdameware,
                    //        CPU_freq = CPU_freq,
                    //        GPU_HR = GPU_HR,
                    //        GPU_NAME = GPU_NAME,
                    //        CPU_name = CPU_name,
                    //        GPU_RAM = GPU_RAM,
                    //        errors = error,
                    //        HDDS = HDDS,
                    //        osarch = osarch,
                    //        RAM = RAM,
                    //        GPU_VR = GPU_VR
                    //    });
                    //}
                    //model.SubmitChanges();
                }
                catch (Exception ex)
                {
                    model.EventLogs.InsertOnSubmit(new Models.EventLog()
                    {
                        Date        = DateTime.Now,
                        Description = ex.Message,
                        Name        = @"Json Request exception"
                    });
                    model.SubmitChanges();
                }
            }
            return("Ok");
        }
Exemple #16
0
 public async Task SendAsync(Models.Mail mail)
 {
     Initialization(mail, out MailMessage message, out SmtpClient client);
     await client.SendMailAsync(message);
 }
Exemple #17
0
 public void Send(Models.Mail mail)
 {
     Initialization(mail, out MailMessage message, out SmtpClient client);
     client.Send(message);
 }
Exemple #18
0
        public void Send(dynamic receiver, string templateKey, dynamic data, CultureInfo language = null)
        {
            language    = (language ?? CultureInfo.CurrentCulture);
            templateKey = (templateKey ?? string.Empty).Trim().ToLower();

            if (string.IsNullOrWhiteSpace(templateKey))
            {
                throw new ArgumentException("You must specify the template key.", "templateKey");
            }

            var decoratedData = data;

            foreach (var decorator in m_decorators)
            {
                decoratedData = decorator.Decorate(decoratedData);
            }

            var decoratedReceiver = receiver;

            foreach (var decorator in m_decorators)
            {
                decoratedReceiver = decorator.Decorate(decoratedReceiver);
            }

            decoratedData.recipient = decoratedReceiver;

            IRenderer applicableRenderer = null;

            // try full name key-en-us
            var triedKeys    = new List <string>();
            var localizedKey = Template.GenerateLocalizedKey(templateKey, language);

            triedKeys.Add(localizedKey);
            if (m_renderer.ContainsKey(localizedKey))
            {
                applicableRenderer = m_renderer[localizedKey];
            }

            // try shorter name key-en
            var shorterLocalizedKey = localizedKey.Substring(0, localizedKey.LastIndexOf('-'));

            triedKeys.Add(shorterLocalizedKey);
            if (applicableRenderer == null && m_renderer.ContainsKey(shorterLocalizedKey))
            {
                applicableRenderer = m_renderer[templateKey];
            }

            // try just key
            triedKeys.Add(templateKey);
            if (applicableRenderer == null && m_renderer.ContainsKey(templateKey))
            {
                applicableRenderer = m_renderer[templateKey];
            }

            if (applicableRenderer == null)
            {
                throw new ArgumentException(
                          string.Format("No template could be found for keys: {0}",
                                        string.Join(",", triedKeys))
                          , "templateKey");
            }

            var mail = new Models.Mail();

            m_senderConfiguration.Configure(mail);
            m_receiverMapper.Map(decoratedReceiver, mail);

            applicableRenderer.Render(mail, decoratedData);

            m_queue.Enqueue(mail, decoratedReceiver);

            if (!m_asyncActive)
            {
                m_mailSenderService.ProcessNext();
            }
        }
 public void SendLinkReset(Models.Mail mail)
 {
     throw new NotImplementedException();
 }
Exemple #20
0
 // GET: Mail/Details/5
 public ActionResult Details(int id)
 {
     Models.Mail mail = db.Mails.Find(id);
     return(View(mail));
 }
Exemple #21
0
        public List <Models.ProyectoEconomico> generarContratos(List <IB.SUPER.APP.Models.OportunidadNegocio> Oportunidades)
        {
            int  iNumProys = 0, idPE = -1, idPSN = -1;
            bool bConTransaccion = false;
            Guid methodOwnerID   = new Guid("2558CB99-C43F-4930-A56C-D6F5CDE51980");
            //IB.SUPER.APP.BLL.ProyectoEconomico ProyBLL = new IB.SUPER.APP.BLL.ProyectoEconomico();
            List <Models.ProyectoEconomico> lstGenerados = new List <Models.ProyectoEconomico>();

            OpenDbConn();
            if (cDblib.Transaction.ownerID.Equals(new Guid()))
            {
                bConTransaccion = true;
            }
            if (bConTransaccion)
            {
                cDblib.beginTransaction(methodOwnerID);
            }

            BLL.Contrato oContrato            = new Contrato(cDblib);
            BLL.FIGURAPROYECTOSUBNODO oFigura = new FIGURAPROYECTOSUBNODO(cDblib);
            IB.SUPER.IAP30.BLL.Nodo   oNodo   = new IAP30.BLL.Nodo();

            try
            {
                foreach (IB.SUPER.APP.Models.OportunidadNegocio oport in Oportunidades)
                {
                    DAL.OportunidadNegocio oON = new DAL.OportunidadNegocio(cDblib);
                    #region Contrato y Extensión
                    //Si la extension==0 -> grabarcontrato
                    if (oport.t377_idextension == 0)
                    {
                        oON.GenerarContrato(oport);
                    }
                    else
                    {
                        //Compruebo que existe contrato. Si no existe, hay que darlo de alta
                        //oContrato = new Contrato(cDblib);
                        if (!oContrato.Existe(oport.t306_icontrato))
                        {
                            oON.GenerarContrato(oport.t306_icontrato, oport.t314_idusuario_responsable);
                        }
                    }
                    //La extensión se graba siempre
                    oON.GenerarExtension(oport);
                    //Si no existe proyecto asociado al contrato-> Generarlo (según parametrización puede crear 1 o 2 proyectos)
                    iNumProys = oON.GetNumProyectos(oport.t306_icontrato);


                    //PARA PRUEBAS
                    //if (bConTransaccion) cDblib.commitTransaction(methodOwnerID);

                    #endregion

                    #region Proyecto Económico
                    if (iNumProys == 0)
                    {
                        //PARA PRUEBAS
                        //if (cDblib.Transaction.ownerID.Equals(new Guid())) cDblib.beginTransaction(methodOwnerID);

                        //Obtengo el subnodo al que asociar el proyecto
                        int t304_idsubnodo = SUBNODO.GetSubNodoDefecto(oport.t303_idnodo);

                        //Obtengo datos del nodo para la creación del proyecto
                        //oNodo = new IAP30.BLL.Nodo();
                        IB.SUPER.IAP30.Models.Nodo mNodo = oNodo.Select(oport.t303_idnodo);

                        #region Cargo los datos para la generación del proyecto
                        Models.ProyectoEconomico mPE = new IB.SUPER.APP.Models.ProyectoEconomico();
                        mPE.automatico = true;
                        if (oport.t377_importeser >= oport.t377_importepro)
                        {
                            mPE.categoria = "S";
                        }
                        else
                        {
                            mPE.categoria = "P";
                        }
                        mPE.cod_cliente    = oport.t302_idcliente_contrato;
                        mPE.cod_contrato   = oport.t306_icontrato;
                        mPE.cod_naturaleza = 1;
                        mPE.fecha_sap      = DateTime.Now;

                        mPE.fini_prevista = Fechas.getSigDiaUltMesCerrado(mNodo.t303_ultcierreECO);
                        mPE.ffin_prevista = GetFechaFin(mPE.fini_prevista, oport.duracion);
                        mPE.modalidad     = GetModalidad(oport.tipocontrato.ToUpper());

                        if (mNodo.t303_modelocostes == "X")
                        {
                            mPE.modelo_coste = "J";
                        }
                        else
                        {
                            mPE.modelo_coste = mNodo.t303_modelocostes;
                        }
                        if (mNodo.t303_modelotarifas == "X")
                        {
                            mPE.modelo_tarifa = "J";
                        }
                        else
                        {
                            mPE.modelo_tarifa = mNodo.t303_modelotarifas;
                        }
                        mPE.nom_proyecto = oport.t377_denominacion;
                        #endregion
                        #region genero proyecto
                        if (mNodo.t303_desglose)
                        {
                            #region  Crea 2 proyectos
                            if (oport.t377_importepro != 0)
                            {
                                if (oport.t377_importeser != 0)
                                {
                                    mPE.nom_proyecto = "P/" + oport.t377_denominacion;
                                }
                                #region Crea un proyecto de categoria PRODUCTO
                                //idPE = ProyBLL.Insert(mPE);
                                //DAL.ProyectoEconomico cPE = new DAL.ProyectoEconomico(cDblib);
                                //idPE = cPE.GenerarProyecto(mPE);
                                idPE = oON.GenerarProyecto(mPE);

                                //Creo el proyecto subnodo
                                mPE.cod_proyecto            = idPE;
                                mPE.cod_subnodo             = t304_idsubnodo;
                                mPE.cualidad                = "P";
                                mPE.cod_usuario_responsable = mNodo.t314_idusuario_responsable;
                                mPE.seudonimo               = mPE.nom_proyecto;

                                //idPSN = cPE.GenerarProyectoSubnodo(mPE);
                                idPSN = oON.GenerarProyectoSubnodo(mPE);

                                //Asigno la figura de RTPE
                                Models.FIGURAPROYECTOSUBNODO mFigura = new Models.FIGURAPROYECTOSUBNODO();
                                mFigura.t305_idproyectosubnodo = idPSN;
                                mFigura.t310_figura            = "M";
                                mFigura.t314_idusuario         = oport.t314_idusuario_gestorprod;

                                //oFigura = new FIGURAPROYECTOSUBNODO(cDblib);
                                oFigura.Insert(mFigura);
                                #region Cargo la lista de vuelta para mostrar al usuario los proyectos generados
                                Models.ProyectoEconomico oProyectoEconomico = new Models.ProyectoEconomico();
                                oProyectoEconomico.cod_proyecto           = idPE;
                                oProyectoEconomico.nom_proyecto           = mPE.nom_proyecto;
                                oProyectoEconomico.cod_contrato           = oport.t306_icontrato;
                                oProyectoEconomico.cod_extension          = oport.t377_idextension;
                                oProyectoEconomico.t305_idproyectosubnodo = idPSN;
                                oProyectoEconomico.t301_estado            = "A";
                                oProyectoEconomico.t302_denominacion      = oport.cliente;
                                oProyectoEconomico.t301_categoria         = mPE.categoria;
                                oProyectoEconomico.t305_cualidad          = "C";
                                oProyectoEconomico.proy_responsable       = oport.responsable;

                                lstGenerados.Add(oProyectoEconomico);
                                #endregion
                                #endregion
                            }
                            if (oport.t377_importeser != 0)
                            {
                                if (oport.t377_importepro != 0)
                                {
                                    mPE.nom_proyecto = "S/" + oport.t377_denominacion;
                                }
                                #region Crea un proyecto de categoria SERVICIO
                                //DAL.ProyectoEconomico cPE = new DAL.ProyectoEconomico(cDblib);
                                //idPE = cPE.GenerarProyecto(mPE);
                                idPE = oON.GenerarProyecto(mPE);

                                //Creo el proyecto subnodo
                                mPE.cod_proyecto            = idPE;
                                mPE.cod_subnodo             = t304_idsubnodo;
                                mPE.cualidad                = "C";
                                mPE.cod_usuario_responsable = mNodo.t314_idusuario_responsable;
                                mPE.seudonimo               = mPE.nom_proyecto;

                                //idPSN = cPE.GenerarProyectoSubnodo(mPE);
                                idPSN = oON.GenerarProyectoSubnodo(mPE);

                                //Asigno la figura de RTPE
                                Models.FIGURAPROYECTOSUBNODO mFigura = new Models.FIGURAPROYECTOSUBNODO();
                                mFigura.t305_idproyectosubnodo = idPSN;
                                mFigura.t310_figura            = "M";
                                mFigura.t314_idusuario         = oport.t314_idusuario_gestorprod;

                                oFigura = new FIGURAPROYECTOSUBNODO(cDblib);
                                oFigura.Insert(mFigura);

                                #region Cargo la lista de vuelta para mostrar al usuario los proyectos generados
                                Models.ProyectoEconomico oProyectoEconomico = new Models.ProyectoEconomico();
                                oProyectoEconomico.cod_proyecto           = idPE;
                                oProyectoEconomico.nom_proyecto           = mPE.nom_proyecto;
                                oProyectoEconomico.cod_contrato           = oport.t306_icontrato;
                                oProyectoEconomico.cod_extension          = oport.t377_idextension;
                                oProyectoEconomico.t305_idproyectosubnodo = idPSN;
                                oProyectoEconomico.t301_estado            = "A";
                                oProyectoEconomico.t302_denominacion      = oport.cliente;
                                oProyectoEconomico.t301_categoria         = mPE.categoria;
                                oProyectoEconomico.t305_cualidad          = "C";
                                oProyectoEconomico.proy_responsable       = oport.responsable;
                                #endregion
                                #endregion
                            }

                            #endregion
                        }
                        else
                        {
                            #region Crea un proyecto
                            //DAL.ProyectoEconomico cPE = new DAL.ProyectoEconomico(cDblib);
                            //idPE = cPE.GenerarProyecto(mPE);
                            idPE = oON.GenerarProyecto(mPE);
                            //Creo el proyecto subnodo
                            mPE.cod_proyecto            = idPE;
                            mPE.cod_subnodo             = t304_idsubnodo;
                            mPE.cualidad                = "C";
                            mPE.cod_usuario_responsable = mNodo.t314_idusuario_responsable;
                            mPE.seudonimo               = mPE.nom_proyecto;

                            //idPSN = cPE.GenerarProyectoSubnodo(mPE);
                            idPSN = oON.GenerarProyectoSubnodo(mPE);

                            //Asigno la figura de RTPE
                            Models.FIGURAPROYECTOSUBNODO mFigura = new Models.FIGURAPROYECTOSUBNODO();
                            mFigura.t305_idproyectosubnodo = idPSN;
                            mFigura.t310_figura            = "M";
                            mFigura.t314_idusuario         = oport.t314_idusuario_gestorprod;

                            oFigura = new FIGURAPROYECTOSUBNODO(cDblib);
                            oFigura.Insert(mFigura);

                            #region Cargo la lista de vuelta para mostrar al usuario los proyectos generados
                            Models.ProyectoEconomico oProyectoEconomico = new Models.ProyectoEconomico();
                            oProyectoEconomico.cod_proyecto             = idPE;
                            oProyectoEconomico.nom_proyecto             = mPE.nom_proyecto;
                            oProyectoEconomico.cod_contrato             = oport.t306_icontrato;
                            oProyectoEconomico.cod_extension            = oport.t377_idextension;
                            oProyectoEconomico.t305_idproyectosubnodo   = idPSN;
                            oProyectoEconomico.t301_estado              = "A";
                            oProyectoEconomico.t302_denominacion        = oport.cliente;
                            oProyectoEconomico.t301_categoria           = mPE.categoria;
                            oProyectoEconomico.t305_cualidad            = "C";
                            oProyectoEconomico.proy_responsable         = oport.responsable;
                            oProyectoEconomico.codred_gestor_produccion = oport.codred_gestor_produccion;

                            lstGenerados.Add(oProyectoEconomico);
                            #endregion
                            #endregion
                        }
                        #endregion
                        //PARA PRUEBAS
                        //cDblib.commitTransaction(methodOwnerID);
                    }
                    #endregion
                }
                //PARA PRUEBAS
                if (bConTransaccion)
                {
                    cDblib.commitTransaction(methodOwnerID);
                }

                #region Correo
                //Con la lista de proyectos generados agrupo para cada gestor de producción concernido la lista de sus nuevos proyectos
                StringBuilder      sb          = new StringBuilder();
                List <Models.Mail> lstGestores = new List <Models.Mail>();
                try
                {
                    foreach (Models.ProyectoEconomico oPE in lstGenerados)
                    {
                        sb.Length = 0;
                        Models.Mail oProf = BuscarCodRed(lstGestores, oPE.codred_gestor_produccion);
                        if (oProf == null)
                        {
                            oProf        = new Models.Mail();
                            oProf.codred = oPE.codred_gestor_produccion;
                            sb.Append(ponerCabecera());
                            sb.Append(@"<tr style='height:16px'><td style='width:80px;padding-left:3px;'>" + oPE.cod_proyecto.ToString("#,###") + "</td>");
                            sb.Append(@"<td style='width:460px;text-overflow:ellipsis;overflow:hidden;'>" + oPE.nom_proyecto + "</td>");
                            sb.Append(@"<td style='width:80px;'>" + oPE.cod_contrato.ToString("#,###") + "</td>");
                            sb.Append(@"<td style='width:80px;'>" + oPE.cod_extension.ToString("#,###") + "</td></tr>");

                            oProf.mensaje = sb.ToString();

                            lstGestores.Add(oProf);
                        }
                        else
                        {
                            sb.Append(@"<tr style='height:16px'><td style='width:80px;padding-left:3px;'>" + oPE.cod_proyecto.ToString("#,###") + "</td>");
                            sb.Append(@"<td style='width:460px;text-overflow:ellipsis;overflow:hidden;'>" + oPE.nom_proyecto + "</td>");
                            sb.Append(@"<td style='width:80px;'>" + oPE.cod_contrato.ToString("#,###") + "</td>");
                            sb.Append(@"<td style='width:80px;'>" + oPE.cod_extension.ToString("#,###") + "</td></tr>");

                            oProf.mensaje += sb.ToString();
                        }
                    }
                    //Con la lista de proyectos agrupada envío a cada gestor de producción concernido la lista de sus nuevos proyectos
                    string    sAsunto     = "SUPER: Proyectos generados";
                    ArrayList aListCorreo = new ArrayList();
                    string    sMensaje    = "";
                    foreach (Models.Mail oGestor in lstGestores)
                    {
                        sMensaje = oGestor.mensaje + ponerPie();
                        string[] aMail = { sAsunto, sMensaje, oGestor.codred };
                        aListCorreo.Add(aMail);
                    }
                    Correo.EnviarCorreos(aListCorreo);
                }
                catch (Exception e1) {
                    SUPDAL.Log.Insertar("App_Code/Negocio/APP/OportunidadNegocio.generarContratos. Error al enviar correos. " + e1.Message);
                }
                #endregion
                return(lstGenerados);
            }
            catch (Exception ex)
            {
                //rollback
                if (cDblib.Transaction.ownerID.Equals(new Guid()))
                {
                    cDblib.rollbackTransaction(methodOwnerID);
                }
                throw new Exception(ex.Message);
            }
            finally
            {
                //nota.Dispose();
                //ProyBLL.Dispose();
                oContrato.Dispose();
                oNodo.Dispose();
                oFigura.Dispose();
            }
        }
        public void Sanitized_correctly()
        {
            // ARRANGE
            var expectedBody = "<strong>&lt;b&gt;o&lt;/b&gt;</strong>";
            var expectedText = "<b>o</b>";
            var t = new Template();
            t.Content.Body = "<strong>{{name}}</strong>";
            t.Content.TextBody = "{{{name}}}";
          

            var r = new HandlebarsRenderer(t);

            // ACT
            var mail = new Models.Mail();
            r.Render(mail, new { name = "<b>o</b>" });

            // ASSERT
            Assert.AreEqual(expectedBody, mail.Body);
            Assert.AreEqual(expectedText, mail.TextBody);
        }
 public Task SendLinkResetAsync(Models.Mail mail)
 {
     throw new NotImplementedException();
 }