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);
        }
Beispiel #20
0
 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
        }