public static Task CreateTask(Guid companyId, Guid? contactId, string caption,string description, IORunEntities dc, Guid? invoiceType, TaskType systemArbejdeTaskLog, Guid? contextBrugerGuid, Guid? contextContactId) { var now = DateTime.Now; var newTask = new Task { Task_GUID = Guid.NewGuid(), Task_CompanyGUID = companyId, Task_ContactGUID = contactId, Task_Caption = caption.Truncate(100), Task_Description = description.Truncate(512), Task_Notes = description, Task_StartDate = DateTime.Today, Task_EndDate = DateTime.Today, Task_CreatedDate = now, Task_CreatedByUserGUID = contextBrugerGuid, Task_InvoiceTypeGUID = invoiceType, Task_Status = (int)TaskStatus.NotStartet, Task_FromUserGUID = contextBrugerGuid, Task_ToUserGUID = contextBrugerGuid, Task_TaskTypeGUID = systemArbejdeTaskLog.TT_GUID, Task_StatusText = TaskStatus.NotStartet.ToString(), Task_UpdatedByUserDate = contextBrugerGuid.HasValue ? now : new Nullable<DateTime>(), Task_UpdatedByUserGUID = contextBrugerGuid, Task_CreatedByContactGUID = contextContactId, Task_UpdatedByContactDate = contextContactId.HasValue ? now : new Nullable<DateTime>() }; return newTask; }
public RegistrationQuickTaskModel(IORunEntities dc, Task task) { Id = task.Task_GUID; Caption = task.Task_Caption; Company = task.Task_CompanyGUID != null ? dc.Kunders.Single(c => c.Kunde_GUID == task.Task_CompanyGUID).Kunde_Navn_1 : string.Empty; IsToday = task.Task_StartDate.HasValue ? task.Task_StartDate.Value.Date == DateTime.Today.Date : false; }
public void Execute(IJobExecutionContext context) { log.Info("Kører send emails job"); try { var service = GetExchangeService( Properties.Settings.Default.SupportEmailAddress, Properties.Settings.Default.SupportEmailUsername, Properties.Settings.Default.SupportEmailPassword, ExchangeVersion.Exchange2010, _serviceUri); _serviceUri = service.Url; using (var dc = new IORunEntities()) { var emailsToSend = dc.EmailQueues.Where(eq => eq.SendFailed == false); log.Info($"Fandt {emailsToSend.Count()} emails der skal sendes"); foreach (var thisEmailToSend in emailsToSend) { try { SendMail(service, new MailWrapper() { BodyText = thisEmailToSend.BodyText, FromDisplayName = thisEmailToSend.FromName, FromEmail = thisEmailToSend.FromEmailAddress, Subject = thisEmailToSend.Subject, ToDisplayName = thisEmailToSend.ToName, ToEmail = thisEmailToSend.ToEmailAddress }); dc.EmailQueues.Remove(thisEmailToSend); } catch (Exception e) { thisEmailToSend.SendFailed = true; thisEmailToSend.SendAttempted = DateTime.Now; thisEmailToSend.SendError = e.ToString(); } } dc.SaveChanges(); } } catch (Exception e) { log.Error(e); } log.Info("Færdig med send emails job"); }
public void IndexCustomer(Guid kundeGuid) { var esClient = CreateEsClient(); EnsureIndexExists(esClient, "kunder"); using (var dc = new IORunEntities()) { var kunde = dc.Kunders.Single(k => k.Kunde_GUID == kundeGuid); var m = Create(kunde); var indexManyResult = esClient.Index(m); } }
public static TaskLog CreateTaskLog(Guid? optionalTaskId, IORunEntities dc, Guid? contextBrugerId, Guid? contextContactId) { var now = DateTime.Now; var newTaskLog = new TaskLog() { TaskLog_GUID = Guid.NewGuid(), TaskLog_CreatedByUserGUID = contextBrugerId, TaskLog_CreatedDate = now, TaskLog_EndDateTime = now, TaskLog_StartDateTime = now, TaskLog_UpdatedByUserDate = now, TaskLog_UpdatedByUserGUID = contextBrugerId, TaskLog_UserGUID = contextBrugerId, TaskLog_ActivityTypeGUID = dc.TaskLogTypes.First().TLT_GUID, TaskLog_InternalText = String.Empty, TaskLog_ExternalText = String.Empty, TaskLog_InvoiceTypeGUID = dc.InvoiceTypes.First().IT_GUID, TaskLog_WebCreated = 1, TaskLog_CreatedByContactGUID = contextContactId, TaskLog_UpdatedByContactGUID = contextContactId }; if (optionalTaskId.HasValue) { var task = dc.Tasks.Single(l => l.Task_GUID == optionalTaskId.Value); var taskLogType = dc.TaskTypes.Single(tt => tt.TT_GUID == task.Task_TaskTypeGUID); var company = task.Task_CompanyGUID.HasValue ? dc.Kunders.Single(k => k.Kunde_GUID == task.Task_CompanyGUID.Value) : null; var invoiceType = task.Task_InvoiceTypeGUID.HasValue ? task.Task_InvoiceTypeGUID : company != null ? company.KundeExtensions.Any() ? company.KundeExtensions.Single().DefaultInvoiceTypeId : null : null; newTaskLog.Task = task; newTaskLog.TaskLog_CompanyGUID = task.Task_CompanyGUID; newTaskLog.TaskLog_ContactGUID = task.Task_ContactGUID; newTaskLog.TaskLog_InvoiceTypeGUID = invoiceType; newTaskLog.TaskLog_ActivityTypeGUID = taskLogType.TT_DefaultTasklogTypeGUID; } // Det er bestemt at alle tasklogs skal fødes med "SY_System arbejde" i stedet for // Skal nok laves snedigere med en setting hvor man vælger en newTaskLog.TaskLog_ActivityTypeGUID = dc.TaskLogTypes.Single(t => t.TLT_Text == "SY_System arbejde").TLT_GUID; return newTaskLog; }
public void Execute(IJobExecutionContext context) { log.Info("Kører check new tasklogs job"); try { var service = SendEmailJob.GetExchangeService( Properties.Settings.Default.SupportEmailAddress, Properties.Settings.Default.SupportEmailUsername, Properties.Settings.Default.SupportEmailPassword, ExchangeVersion.Exchange2010, _serviceUri); _serviceUri = service.Url; using (var dc = new IORunEntities()) { var synligeTasksOprettetEllerOpdateretIdag = dc.Tasks.Where(tl => ( tl.Task_NewestTasklogDate.HasValue && tl.Task_NewestTasklogDate >= DateTime.Today ) && tl.IsThrash == 0 && tl.Task_WebVisible == 1).ToList(); log.Info($"Checker for nye urapporterede tasklogs på {synligeTasksOprettetEllerOpdateretIdag.Count} tasks"); foreach (var thisTask in synligeTasksOprettetEllerOpdateretIdag) { try { CheckTask(thisTask, dc); } catch (Exception checkTaskExcepException) { log.Error("Check task failed", checkTaskExcepException); } } dc.SaveChanges(); } } catch (Exception e) { log.Error(e); } log.Info("Færdig med check for tasklogs job"); }
public ActionResult Create(TicketCreateModel model) { var contactId = this.GetContactId(); using (var dc = new IORunEntities()) { var contact = dc.Contacts.Single(c => c.Contact_GUID == contactId); var company = dc.Kunders.Single(k => k.Kunde_GUID == contact.Contact_CompanyGUID); var systemArbejdeTaskLog = TaskTypeRepository.GetHelpdeskTaskType(dc); var invoiceType = KundeRepository.FindStandardFakturaType(company); var helpdeskUser = TaskRepository.GetHelpdeskUser(dc); var newTask = TaskRepository.CreateTask( company.Kunde_GUID, contactId, model.Overskrift, model.Beskrivelse, dc, invoiceType, systemArbejdeTaskLog, helpdeskUser.Bruger_GUID, contactId); newTask.Task_WebCreated = 1; newTask.Task_WebVisible = 1; dc.Tasks.Add(newTask); dc.SaveChanges(); // Laver ged i rapportering //var newTaskLog = TaskRepository.CreateTaskLog(newTask.Task_GUID, dc, null, contactId); //newTaskLog.TaskLog_WebVisible = 1; //newTaskLog.TaskLog_InternalText = model.Beskrivelse; //newTaskLog.TaskLog_ExternalText = model.Beskrivelse; //dc.TaskLogs.Add(newTaskLog); var newMail = MailRepository.CreateTicketOprettetMail(contact, model.Overskrift, newTask.Task_IssueIdentifier, Properties.Settings.Default.SiteRootUrl); dc.EmailQueues.Add(newMail); dc.SaveChanges(); return RedirectToAction("Edit", new { id = newTask.Task_IssueIdentifier }); } }
public TicketIndexItemModel(IORunEntities dc, Task ta) { Id = ta.Task_GUID; IssueId = ta.Task_IssueIdentifier; Caption = ta.Task_Caption; CreatedDate = ta.Task_CreatedDate.ToString("g"); CreatedByUserName = ta.Task_CreatedByUserGUID.HasValue ? dc.Brugers.Single(b => b.Bruger_GUID == ta.Task_CreatedByUserGUID).Bruger_Initialer : ""; CreatedByContactName = ta.Task_CreatedByContactGUID.HasValue ? dc.Contacts.Single(b => b.Contact_GUID == ta.Task_CreatedByContactGUID).Contact_Name : ""; UpdatedByUserName = ta.Task_UpdatedByUserGUID.HasValue ? dc.Brugers.Single(b => b.Bruger_GUID == ta.Task_UpdatedByUserGUID).Bruger_Initialer : ""; UpdatedByContactName = ta.Task_UpdatedByContactGUID.HasValue ? dc.Contacts.Single(b => b.Contact_GUID == ta.Task_UpdatedByContactGUID).Contact_Name : ""; if ((ta.Task_UpdatedByUserDate.HasValue && ta.Task_UpdatedByContactDate.HasValue && ta.Task_UpdatedByUserDate > ta.Task_UpdatedByContactDate) || (ta.Task_UpdatedByUserDate.HasValue)) { UpdatedDate = ta.Task_UpdatedByUserDate?.ToString("g"); UpdatedBy = UpdatedByUserName; } else { UpdatedDate = ta.Task_UpdatedByContactDate?.ToString("g"); UpdatedBy = UpdatedByContactName; } if (ta.Task_CreatedByContactGUID.HasValue) { CreatedBy = CreatedByContactName; } else { CreatedBy = CreatedByUserName; } NyesteTekst = ta.TaskLogs.Any() ? ta.TaskLogs.OrderByDescending(tl => tl.TaskLog_CreatedDate).First().TaskLog_ExternalText : string.Empty; Status = ta.Task_IsClosed == 1 ? "Lukket" : ta.Task_StatusText; }
public void IndexCustomers() { var esClient = CreateEsClient(); WipeIndex(esClient, "kunder"); using (var dc = new IORunEntities()) { var kunderOgKontakter = dc. Kunders. Where(k => k.IsThrash == 0). ToList().Select(k => Create(k)).ToList(); var indexManyResult = esClient.IndexMany(kunderOgKontakter); } }
public ActionResult Index() { var contactId = this.GetContactId(); using (var dc = new IORunEntities()) { var contact = dc.Contacts.Single(c => c.Contact_GUID == contactId); var model = new ProfileEditModel(); model.EmailAdresse = contact.Contact_Work_EMail; model.Mobile = contact.Contact_Work_MobileNumber; model.Kodeord = ""; model.NytKodeordBekraeft = ""; return View(model); } }
public TaskSelectionModel(IORunEntities dc, Task k) { // Har oplevet at finde opgaver der peger på kontakt der ikke findes :( var contact = k.Task_ContactGUID.HasValue ? dc.Contacts.SingleOrDefault(tt => tt.Contact_GUID == k.Task_ContactGUID.Value) : null; // Har oplevet at finde opgaver der peger på task type der ikke findes :( var taskType = k.Task_TaskTypeGUID.HasValue ? dc.TaskTypes.SingleOrDefault(tt => tt.TT_GUID == k.Task_TaskTypeGUID.Value) : null; Id = k.Task_GUID; Name = k.Task_Caption; TaskType = taskType != null ? taskType.TT_Name : string.Empty; ContactName = contact != null ? contact.Contact_Name : string.Empty; ContactId = contact != null ? contact.Contact_GUID.ToString() : null; IsClosed = k.Task_IsClosed == 1; }
public ActionResult Index(ProfileEditModel model) { var contactId = this.GetContactId(); var valid = true; ModelState.Clear(); using (var dc = new IORunEntities()) { var contact = dc.Contacts.Single(c => c.Contact_GUID == contactId); contact.Contact_Work_EMail = model.EmailAdresse; contact.Contact_Work_MobileNumber = model.Mobile; if (string.IsNullOrEmpty(model.Kodeord) == false) { if (string.Equals(model.Kodeord, model.NytKodeordBekraeft)) { contact.Contact_PWD = model.Kodeord; model.ErrorMessage = "Passwordet er ændret"; model.Kodeord = ""; model.NytKodeordBekraeft = ""; } else { model.ErrorMessage = "De to passwords skal være ens"; valid = true; } } else { model.ErrorMessage = "Ændringer gemt"; } if (valid) { dc.SaveChanges(); } return View(model); } }
public ActionResult Index() { var contactId = this.GetContactId(); using (var dc = new IORunEntities()) { var contact = dc.Contacts.Single(c => c.Contact_GUID == contactId); var tasks = dc. Tasks. Where(t => t.IsThrash == 0 && (t.Task_WebVisible == 1) && t.Task_CompanyGUID == contact.Contact_CompanyGUID).ToList().Select(ta => new TicketIndexItemModel(dc, ta)).ToList(); var model = new TicketIndexModel() { Tasks = tasks }; return View(model); } }
public static Bruger GetHelpdeskUser(IORunEntities dc) { return dc.Brugers.Single(b => b.Bruger_Navn == "Helpdesk"); }
public void Execute(IJobExecutionContext context) { log.Info("Kører check support inbox job"); try { var service = SendEmailJob.GetExchangeService( Properties.Settings.Default.SupportEmailAddress, Properties.Settings.Default.SupportEmailUsername, Properties.Settings.Default.SupportEmailPassword, ExchangeVersion.Exchange2010, _serviceUri); _serviceUri = service.Url; var inboxFolder = new FolderId(WellKnownFolderName.Inbox, new Mailbox(Properties.Settings.Default.SupportEmailAddress)); var mailIds = GetMailIdsToProcess(service, inboxFolder); if (mailIds.Any()) { using (var dc = new IORunEntities()) { log.Info($"Checker {mailIds.Count} mails"); foreach (var mailInfo in mailIds) { if (_alreadySpottedEmails.Contains(mailInfo.ItemId) == false) { var spottedSupportEmail = dc.SupportEmailReceives.SingleOrDefault(er => er.ExchangeItemId == mailInfo.ItemId); if (spottedSupportEmail == null) { var propertySet = new PropertySet( BasePropertySet.IdOnly, ItemSchema.Subject, EmailMessageSchema.From, ItemSchema.Body, ItemSchema.DateTimeReceived); propertySet.RequestedBodyType = BodyType.Text; var exchangeMail = Microsoft.Exchange.WebServices.Data.EmailMessage.Bind( service, new ItemId(mailInfo.ItemId), propertySet); ProcessReceivedSupportEmail(dc, exchangeMail); dc.SupportEmailReceives.Add(new SupportEmailReceive() { ExchangeItemId = mailInfo.ItemId, Subject = mailInfo.Subject, SpottedAt = DateTime.Now }); _alreadySpottedEmails.Add(mailInfo.ItemId); log.Info($"Modtaget support email '{mailInfo.Subject}'"); } else { _alreadySpottedEmails.Add(mailInfo.ItemId); } } } dc.SaveChanges(); } } } catch (Exception e) { log.Error(e); } log.Info("Færdig med inbox check job"); }
private void ProcessReceivedSupportEmail(IORunEntities dc, EmailMessage exchangeMail) { log.Info($"Processerer {exchangeMail.Subject}"); var senderEmail = exchangeMail.From.Address; if (senderEmail.Contains("@")) { var contactsWithMatchingEmail = FindContactWithMatchingEmail(dc, senderEmail); if (contactsWithMatchingEmail.Count == 1) { var contact = contactsWithMatchingEmail.Single(); var company = dc.Kunders.Single(k => k.Kunde_GUID == contact.Contact_CompanyGUID.Value); var ticketNumber = FindTicketNumber(exchangeMail); if (ticketNumber > 0) { log.Info($"Ticket nummer fundet: {ticketNumber}"); var ticketTask = dc.Tasks.SingleOrDefault(t => t.Task_IssueIdentifier == ticketNumber); if (ticketTask != null) { if (ticketTask.Task_CompanyGUID == contact.Contact_CompanyGUID.Value) { LogSupport(dc, ticketTask, contact, exchangeMail, ticketNumber); } else { log.Warn($"Ticket tilhører ikke kontakt persons kunde: {ticketNumber}"); } } else { log.Warn($"Ingen task med ticket nummer fundet: {ticketNumber}"); } } else { var systemArbejdeTaskType = TaskTypeRepository.GetHelpdeskTaskType(dc); var invoiceType = KundeRepository.FindStandardFakturaType(company); var helpdeskUser = TaskRepository.GetHelpdeskUser(dc); var nyTicketTask = TaskRepository.CreateTask( contact.Contact_CompanyGUID.Value, contact.Contact_GUID, exchangeMail.Subject, exchangeMail.Body.Text, dc, invoiceType, systemArbejdeTaskType, helpdeskUser.Bruger_GUID, contact.Contact_GUID); nyTicketTask.Task_WebVisible = 1; nyTicketTask.Task_WebCreated = 1; nyTicketTask.Task_Description = exchangeMail.Body.Text.Truncate(512); dc.Tasks.Add(nyTicketTask); dc.SaveChanges(); ticketNumber = nyTicketTask.Task_IssueIdentifier; var newTaskLog= LogSupport(dc, nyTicketTask, contact, exchangeMail, ticketNumber); var newMailForTicketCreated = MailRepository.CreateTicketOprettetMail(contact, exchangeMail.Subject, ticketNumber, Properties.Settings.Default.SiteRootUrl); dc.EmailQueues.Add(newMailForTicketCreated); dc.SaveChanges(); // Registrer at der allerede er sendt en ticket oprettet mail, ellers // kommer der både oprettet og opdateret mails dc.TasklogChangeReporteds.Add(new TasklogChangeReported() { TaskId = nyTicketTask.Task_GUID, NewestChange = DateTime.Now.AddMinutes(5), TasklogId = newTaskLog.TaskLog_GUID}); log.Info($"Ny ticket oprettet med nummer {nyTicketTask.Task_IssueIdentifier}"); } } else { log.InfoFormat($"Ukendt email adresse, eller flere muligheder: {senderEmail} Count: {contactsWithMatchingEmail.Count}"); } } else { log.InfoFormat($"Ikke en email adresse: {senderEmail}"); } }
private TaskLog LogSupport(IORunEntities dc, Task task, Contact contact, EmailMessage exchangeMail, int ticketNumber) { var logText = $"{exchangeMail.Subject}:\n\n{exchangeMail.Body.Text}"; var newTaskLog = TaskRepository.CreateTaskLog(task.Task_GUID, dc, null, contact.Contact_GUID); newTaskLog.TaskLog_WebVisible = 1; newTaskLog.TaskLog_InternalText = logText.AsEol(); newTaskLog.TaskLog_ExternalText = logText.AsEol(); dc.TaskLogs.Add(newTaskLog); task.Task_UpdatedByContactGUID = contact.Contact_GUID; task.Task_UpdatedByContactDate = DateTime.Now; log.Info($"Logget support {logText} på ticket {ticketNumber}"); return newTaskLog; }
private static List<Contact> FindContactWithMatchingEmail(IORunEntities dc, string senderEmail) { var contactsWithMatchingEmail = dc.Contacts.Where(c => ( c.Contact_Work_EMail == senderEmail || c.Contact_Work_EMail1 == senderEmail || c.Contact_Work_EMail2 == senderEmail || c.Contact_Private_EMail == senderEmail) && c.Kunder.IsSupportSiteEnabled == true ).ToList(); return contactsWithMatchingEmail; }
public RegistrationModel(IORunEntities dc, TaskLog taskLog) { Id = taskLog.TaskLog_GUID; StartDate = taskLog.TaskLog_StartDateTime.Value.AsJavascriptDate(); StartDateAsString = taskLog.TaskLog_StartDateTime.Value.AsDateString(); if (taskLog.Task != null) { SelectedTask = new TaskSelectionModel(dc, taskLog.Task); IsTaskSelected = true; } else { IsTaskSelected = false; } // HVORFOR var det et krav at contact også skulle være sat?? //if (taskLog.TaskLog_CompanyGUID.HasValue && taskLog.TaskLog_CompanyGUID.Value != Guid.Empty && // taskLog.TaskLog_ContactGUID.HasValue && taskLog.TaskLog_ContactGUID.Value != Guid.Empty) if (taskLog.TaskLog_CompanyGUID.HasValue && taskLog.TaskLog_CompanyGUID.Value != Guid.Empty) { var kunde = dc.Kunders.Single(c => c.Kunde_GUID == taskLog.TaskLog_CompanyGUID.Value); SelectedCompany = new CompanySelectionModel() { Address = kunde.Kunde_Adresse_1, Id = kunde.Kunde_GUID, Name = kunde.Kunde_Navn_1 }; } if (taskLog.TaskLog_ContactGUID.HasValue && taskLog.TaskLog_ContactGUID.Value != Guid.Empty) { var kontakt = dc.Contacts.Single(c => c.Contact_GUID == taskLog.TaskLog_ContactGUID.Value); SelectedContact = new ContactSelectionModel() { Title = kontakt.Contact_Title, Id = kontakt.Contact_GUID, Name = kontakt.Contact_Name }; } InternalText = taskLog.TaskLog_InternalText; ExternalText = taskLog.TaskLog_ExternalText; TaskLogTypeId = taskLog.TaskLog_ActivityTypeGUID.Value; TaskLogTypeName = taskLog.TaskLog_ActivityTypeGUID.HasValue && taskLog.TaskLog_ActivityTypeGUID.Value != Guid.Empty ? dc.TaskLogTypes.Single(tlt => tlt.TLT_GUID == taskLog.TaskLog_ActivityTypeGUID.Value).TLT_Text : string.Empty; InvoiceTypeId = taskLog.TaskLog_InvoiceTypeGUID ?? Guid.Empty; InvoiceTypeName = taskLog.TaskLog_InvoiceTypeGUID.HasValue && taskLog.TaskLog_InvoiceTypeGUID.Value != Guid.Empty ? dc.InvoiceTypes.Single(tlt => tlt.IT_GUID == taskLog.TaskLog_InvoiceTypeGUID.Value).IT_Name : string.Empty; FaktorId = taskLog.TaskLog_FactorGUID != null ? taskLog.TaskLog_FactorGUID.Value : Guid.Empty; FaktorName = taskLog.TaskLog_FactorGUID.HasValue && taskLog.TaskLog_FactorGUID.Value != Guid.Empty ? dc.Faktors.Single(tlt => tlt.FAK_GUID == taskLog.TaskLog_FactorGUID.Value).FAK_KortBeskrivelse : string.Empty; BillableKm = taskLog.TaskLog_BillKm; NonBillableKm = taskLog.TaskLog_NoBillKm; BillableTime = taskLog.TaskLog_BillTime; NonBillableTime = taskLog.TaskLog_NoBillTime; InvoiceNumber = taskLog.TaskLog_InvoiceNumber; IsReadonly = string.IsNullOrEmpty(InvoiceNumber) == false || (SelectedTask != null && SelectedTask.IsClosed); }
public TaskModel(IORunEntities dc, Task task) { Id = task.Task_GUID; IsClosed = task.Task_IsClosed == 1; Caption = task.Task_Caption; }
public ActionResult Edit(TicketEditModel model) { var contactId = this.GetContactId(); using (var dc = new IORunEntities()) { var contact = dc.Contacts.Single(c => c.Contact_GUID == contactId); var task = dc.Tasks.Single(t => t.Task_GUID == model.TaskId); if (task.Task_CompanyGUID != contact.Contact_CompanyGUID) throw new SecurityException("Unauthorized"); var newTaskLog = TaskRepository.CreateTaskLog(task.Task_GUID, dc, null, contactId); newTaskLog.TaskLog_WebVisible = 1; newTaskLog.TaskLog_InternalText = model.NewMessage; newTaskLog.TaskLog_ExternalText = model.NewMessage; dc.TaskLogs.Add(newTaskLog); task.Task_UpdatedByContactGUID = contactId; task.Task_UpdatedByContactDate = DateTime.Now; dc.SaveChanges(); var newModel = BuildEditModel(task.Task_IssueIdentifier); return View(newModel); } }
private TicketEditModel BuildEditModel(int id) { var contactId = this.GetContactId(); using (var dc = new IORunEntities()) { var contact = dc.Contacts.Single(c => c.Contact_GUID == contactId); var task = dc.Tasks.Single(t => t.Task_IssueIdentifier == id); if (task.Task_CompanyGUID != contact.Contact_CompanyGUID) throw new SecurityException("Unauthorized"); var model = new TicketEditModel(); model.TicketGuid = task.Task_GUID; model.Overskrift = task.Task_Caption; model.Beskrivelse = task.Task_Description; model.TicketNumber = task.Task_IssueIdentifier; model.Messages = task.TaskLogs.Where(tl => tl.IsThrash == 0). ToList(). OrderByDescending(tl => tl.TaskLog_CreatedDate). Select(tl => new TaskEditItemModel(tl, dc)). ToList(); model.TaskId = task.Task_GUID; model.IsClosed = task.Task_IsClosed == 1; model.Status = task.Task_IsClosed == 1 ? $"Lukket" : task.Task_StatusText; model.AsignedTo = task.Task_ToUserGUID.HasValue ? dc.Brugers.Single(b => b.Bruger_GUID == task.Task_ToUserGUID.Value).Bruger_Navn : "Ingen"; return model; } }
private static void CheckTask(Task checkTask, IORunEntities dc) { var taskCompany = checkTask.Task_CompanyGUID.HasValue ? dc.Kunders.SingleOrDefault(k => k.Kunde_GUID == checkTask.Task_CompanyGUID.Value) : null; if (taskCompany != null && taskCompany.IsSupportSiteEnabled == true) { // Find tasklogs der endnu ikke er rapporteret som ændring på task var unreportedTasklogs = checkTask.TaskLogs.Where(tl => checkTask.TasklogChangeReporteds.Any(r => r.TasklogId == tl.TaskLog_GUID) == false); // Hvis der er en eller flere nye tasklogs if (unreportedTasklogs.Any()) { // Find kontakt personer der er involveret i denne task var contactsDerSkalNotificeres = checkTask.TaskLogs.Where(tl => tl.IsThrash == 0 && tl.TaskLog_CreatedByContactGUID.HasValue) .Select(tl => tl.TaskLog_CreatedByContactGUID.Value) .Union( checkTask.TaskLogs.Where(tl => tl.IsThrash == 0 && tl.TaskLog_UpdatedByContactDate.HasValue) .Select(tl => tl.TaskLog_UpdatedByContactGUID.Value) ).Distinct(); // Notificer involverede kontakt personer foreach (var thisNotifcerContactId in contactsDerSkalNotificeres) { var contact = dc.Contacts.Single(c => c.Contact_GUID == thisNotifcerContactId); var technician = checkTask.Task_ToUserGUID.HasValue ? dc.Brugers.Single(b => b.Bruger_GUID == checkTask.Task_ToUserGUID.Value) : null; var email = MailRepository.CreateTicketOpdateretMail( contact, checkTask.Task_Caption, checkTask.Task_IssueIdentifier, Properties.Settings.Default.SiteRootUrl, technician, checkTask); dc.EmailQueues.Add(email); log.Info($"Oprettede notifikation email til {email.ToEmailAddress}"); } // Registrer at vi har rapporteret om disse tasklogs foreach (var unreportedTasklog in unreportedTasklogs) { var tasklogReported = new TasklogChangeReported() { NewestChange = DateTime.Now, TasklogId = unreportedTasklog.TaskLog_GUID }; checkTask.TasklogChangeReporteds.Add(tasklogReported); } } // Any unreported tasklogs? } // Task company != null && company.supportenabled }