public AlertModel GetWithValues(int alertTemplateId, Dictionary <string, string> values) { AlertTemplateServices templateServices = new AlertTemplateServices(); AlertTemplateModel template = templateServices.GetById(alertTemplateId); AlertModel alert = new AlertModel(); alert.Body = template.Body; alert.Extra = template.Extra; alert.Subject = template.Subject; alert.Url = template.Url; if (values != null) { foreach (KeyValuePair <string, string> entry in values) { alert.Body = alert.Body != null?alert.Body.Replace("#" + entry.Key + "#", entry.Value) : ""; alert.Extra = alert.Extra != null?alert.Extra.Replace("#" + entry.Key + "#", entry.Value) : ""; alert.Subject = alert.Subject != null?alert.Subject.Replace("#" + entry.Key + "#", entry.Value) : ""; alert.Url = alert.Url != null?alert.Url.Replace("#" + entry.Key + "#", entry.Value) : ""; } } alert.AlertTemplateId = template.AlertTemplateId; alert.Icon = template.Icon; alert.Status = (int)AlertStatus.New; alert.TimeAgo = "Recien"; return(alert); }
public ActionResult OfferTransaction(string id, OfferModel offer) { RequestResult <List <AlertModel> > result = new RequestResult <List <AlertModel> >() { Status = Status.Success }; List <AlertModel> lstAlertToProjectCompany = new List <AlertModel>(); List <AlertModel> lstAlertToVesselCompany = new List <AlertModel>(); OfferServices services = new OfferServices(); AlertTemplateServices templateServices = new AlertTemplateServices(); AlertServices alertServices = new AlertServices(); try { OfferModel val = new OfferModel(); if (offer.OfferId != null) { val = services.GetById((int)offer.OfferId); if (val == null) { throw new Exception("NOT_FOUND"); } } if (id.ToLower() == "offer") { offer.ProjectAdmin.PersonId = SessionWeb.User.PersonId; offer.UserModifiedId = SessionWeb.User.PersonId; result = services.InsComplete(offer); Dictionary <string, string> values = new Dictionary <string, string>(); values.Add("ID", offer.Vessel.VesselId.ToString()); AlertTemplateModel template = templateServices.GetById(8); AlertModel alert = alertServices.GetWithValues(template, values); lstAlertToProjectCompany.Add(alert); //Trick the form how i get the offer val = services.GetById((int)offer.OfferId); } else if (id.ToLower() == "accept") { offer.VesselAdmin.PersonId = SessionWeb.User.PersonId; offer.UserModifiedId = SessionWeb.User.PersonId; result = services.Accept(offer, (int)SessionWeb.User.PersonId); Dictionary <string, string> values = new Dictionary <string, string>(); values.Add("ID", "" + val.Project.ProjectId); AlertTemplateModel template = templateServices.GetById(10); AlertModel alert = alertServices.GetWithValues(template, values); lstAlertToProjectCompany.Add(alert); Dictionary <string, string> values2 = new Dictionary <string, string>(); values2.Add("ID", PersonSessionId.ToString()); AlertTemplateModel template2 = templateServices.GetById(11); AlertModel alert2 = alertServices.GetWithValues(template2, values2); lstAlertToVesselCompany.Add(alert2); } else if (id.ToLower() == "reject") { offer.VesselAdmin.PersonId = SessionWeb.User.PersonId; offer.UserModifiedId = SessionWeb.User.PersonId; result = services.Reject(offer); Dictionary <string, string> values2 = new Dictionary <string, string>(); values2.Add("ID", PersonSessionId.ToString()); AlertTemplateModel template2 = templateServices.GetById(11); AlertModel alert2 = alertServices.GetWithValues(template2, values2); lstAlertToVesselCompany.Add(alert2); } else if (id.ToLower() == "fix") { MessageServices chatServices = new MessageServices(); offer.VesselAdmin.PersonId = SessionWeb.User.PersonId; offer.UserModifiedId = SessionWeb.User.PersonId; if (val.Status == OfferModel.FIX && val.VesselAdmin.PersonId == SessionWeb.User.PersonId) { chatServices.MarkAsReaded( new MessageModel() { ReferenceId = offer.OfferId, From = SessionWeb.User.PersonId }); return(Json(result)); } if (val.Status == OfferModel.NEW) { result = services.Fix(offer); Dictionary <string, string> values = new Dictionary <string, string>(); values.Add("ID", offer.OfferId.ToString()); AlertTemplateModel template = templateServices.GetById(9); AlertModel alert = alertServices.GetWithValues(template, values); alert.To = val.ProjectAdmin.PersonId; result.Data.Add(alert); Dictionary <string, string> values2 = new Dictionary <string, string>(); values2.Add("ID", PersonSessionId.ToString()); AlertTemplateModel template2 = templateServices.GetById(11); AlertModel alert2 = alertServices.GetWithValues(template2, values2); lstAlertToVesselCompany.Add(alert2); } } if (result.Status == Status.Success) { var context = GlobalHost.ConnectionManager.GetHubContext <AlertHub>(); foreach (AlertModel alert in result.Data) { context.Clients.Group(string.Format("P{0}", alert.To)) .newAlert(alert); } foreach (AlertModel alert in lstAlertToProjectCompany) { context.Clients.Group(string.Format("C{0}", val.Project.CompanyId)) .newAlert(alert); } foreach (AlertModel alert in lstAlertToVesselCompany) { context.Clients.Group(string.Format("C{0}", val.Vessel.Company.CompanyId.ToString())) .newAlert(alert); } } } catch (Exception ex) { if (ex.Message == "STATUS_NOT_VALID") { result.Message = "La oferta ya no se encuentra disponible."; result.Status = Status.Error; } else if (ex.Message == "NOT_AVAILABILITY") { result.Message = "El barco seleccionado, no está disponible en las fechas seleccionadas."; result.Status = Status.Warning; } else { throw new Exception(result.Message); } } result.Data = null; return(Json(result)); }
/// <summary> /// Validate Status /// Validate Availabilty /// Update Offer /// Update availability /// Cancel other offers if exists /// Notify to vessel owners cancelled if exists /// Notify to project owner by Signal and Mail /// Generate Agreement Report and send Mail /// </summary> /// <param name="model"></param> public RequestResult <List <AlertModel> > Accept(OfferModel model, int currentPersonId) { RequestResult <List <AlertModel> > resp = new RequestResult <List <AlertModel> >(); MailServices MailServ = new MailServices(); ITemplate factory = new TemplateMessagesFactory(); VesselServices vesselServices = new VesselServices(); VesselAvailabilityServices availabilityServices = new VesselAvailabilityServices(); AlertServices alertServices = new AlertServices(); AlertTemplateServices templateServices = new AlertTemplateServices(); List <AlertModel> lstAlertToSend = new List <AlertModel>(); ProjectServices projectServices = new ProjectServices(); TransactionOptions scopeOptions = new TransactionOptions(); scopeOptions.IsolationLevel = IsolationLevel.Serializable; using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, scopeOptions)) { try { //Validate if (model.OfferId == null) { throw new Exception("REQUIRED OfferId"); } if (model.VesselAdmin.PersonId == null) { throw new Exception("VesselAdmin.PersonId REQUIRED"); } OfferModel val = GetById((int)model.OfferId); if (val == null) { throw new Exception("NOT_FOUND"); } if (val.Status != OfferModel.NEW) { if (!(val.Status == OfferModel.FIX && val.VesselAdmin.PersonId == currentPersonId)) { throw new Exception("STATUS_NOT_VALID"); } } VesselAvailabilityModel availabilityModel = new VesselAvailabilityModel() { ReasonId = VesselAvailabilityModel.DEFAULT, VesselId = val.Vessel.VesselId, StartDate = val.Project.StartDate, EndDate = val.Project.EndDate }; int val2 = vesselServices.EvalAvailability(availabilityModel); if (val2 > 0) { throw new Exception("NOT_AVAILABILITY"); } //Update Offer model.Status = OfferModel.ACCEPTED; var respOffer = InsUpd(model); if (respOffer.Status != Status.Success) { throw new Exception(respOffer.Message); } //Update vessel availabilty var respAvailability = availabilityServices.InsUpd(availabilityModel); if (respAvailability.Status != Status.Success) { throw new Exception(respAvailability.Message); } //Update Project Status var respStatus = projectServices.UpdateStatus(val.Project.ProjectId, ProjectModel.STATUS_FIXED); if (respStatus.Status != Status.Success) { throw new Exception(respStatus.Message); } //Get new values val = GetById((int)model.OfferId); // Cancel other offers if exists List <OfferModel> lstNotifyCancel = CancelOthers((int)val.OfferId); Dictionary <string, string> values = new Dictionary <string, string>(); values.Add("FLAG", val.Vessel.Country.Name); values.Add("HOMEPORT", val.Vessel.HomePort.Name); AlertTemplateModel template = templateServices.GetById(4); foreach (OfferModel offerCancelled in lstNotifyCancel) { if (!values.ContainsKey("FOLIO")) { values.Add("FOLIO", offerCancelled.Project.Folio); } else { values["FOLIO"] = offerCancelled.Project.Folio; } AlertModel alertCancelled = alertServices.GetWithValues(template, values); alertCancelled.To = offerCancelled.ProjectAdmin.PersonId; lstAlertToSend.Add(alertCancelled); } //Notify to project owner values = new Dictionary <string, string>(); values.Add("IMO", val.Vessel.Imo); values.Add("VESSELNAME", val.Vessel.Name); values.Add("FOLIO", val.Project.Folio); AlertModel alertAccepted = alertServices.GetWithValues(5, values); alertAccepted.To = val.ProjectAdmin.PersonId; lstAlertToSend.Add(alertAccepted); var respAlert = alertServices.InsUpd(lstAlertToSend); if (respAlert != null) { throw new Exception(respAlert.Message); } //Send mail //Generate Agreement Report and send to mail List <MailAttachments> agreementReportProject = new List <MailAttachments>(); SystemVariableServices SVS = new SystemVariableServices(); Dictionary <string, string[]> param = new Dictionary <string, string[]>(); string EgulfUrl = SVS.GetSystemVariableValue("EgulfWeb"); param.Add("{Enfasis}", new string[] { val.Vessel.Imo, val.Vessel.Name, val.Project.Folio }); param.Add("{Btn_url}", new string[] { EgulfUrl }); ReportServices ReportServ = new ReportServices(); agreementReportProject.Add(ReportServ.AgreementReportAttachment((int)model.OfferId, (int)TypeUser.Project)); MailServ.SendMailWithAttachment(factory.GetTemplate(val.ProjectAdmin.Email, "OfferAccepted", param), agreementReportProject); param = new Dictionary <string, string[]>(); param.Add("{Enfasis}", new string[] { val.Project.Folio }); param.Add("{Btn_url}", new string[] { EgulfUrl }); List <MailAttachments> agreementReportVessel = new List <MailAttachments>(); agreementReportVessel.Add(ReportServ.AgreementReportAttachment((int)model.OfferId, (int)TypeUser.Vessel)); MailServ.SendMailWithAttachment(factory.GetTemplate(val.VesselAdmin.Email, "YouAcceptedOffer", param), agreementReportVessel); resp.Data = lstAlertToSend; ts.Complete(); } catch (Exception ex) { ts.Dispose(); resp = new RequestResult <List <AlertModel> >() { Status = Status.Error, Message = ex.Message }; Elmah.ErrorSignal.FromCurrentContext().Raise(ex); throw ex; } } return(resp); }