public void ValidateCallLogGridLinkButtonVisibility(CS_CallLog callLog)
 {
     try
     {
         _view.SetCallLogGridViewHyperLinkVisibility(!callLog.CS_CallType.IsAutomaticProcess, "hlUpdate");
     }
     catch (Exception ex)
     {
         Logger.Write(string.Format("There was an error validating the visibility for the Call log Grid Link Button!\n{0}\n{1}", ex.Message, ex.StackTrace));
         _view.DisplayMessage("There was an error loading the information! Please try again.", false);
     }
 }
        private string GenerateEmailSubjectForReservedResources(CS_CallLog callLogEntry)
        {
            StringBuilder subject = new StringBuilder();
            int jobID = callLogEntry.JobID;
            CS_Job job = _jobRepository.Get(e => e.ID == jobID, "CS_CustomerInfo", "CS_CustomerInfo.CS_Customer", "CS_JobInfo", "CS_JobInfo.CS_JobAction", "CS_LocationInfo", "CS_LocationInfo.CS_City", "CS_LocationInfo.CS_State");

            subject.Append(job.PrefixedNumber);
            subject.Append(", ");
            subject.Append(job.CS_CustomerInfo.CS_Customer.Name.Trim());
            subject.Append(", ");
            subject.Append(callLogEntry.CS_Job.CS_JobInfo.CS_JobAction.Description);

            if (job.ID != (int)Globals.GeneralLog.ID)
            {
                subject.Append(", ");
                subject.Append(callLogEntry.CS_Job.CS_LocationInfo.CS_City.Name);
                subject.Append(" ");
                subject.Append(callLogEntry.CS_Job.CS_LocationInfo.CS_State.Acronym);
            }

            subject.Append(", Reserved Resource");

            return subject.ToString();
        }
        /// <summary>
        /// Generates records for a FirstAlert Call Criteria Resources
        /// </summary>
        /// <param name="initialAdvise">Generated Initial Advise Call Log</param>
        private IList<EmailVO> SaveCallCriteriaFirstAlertResources(CS_CallLog firstAlert)
        {
            try
            {
                IList<CS_CallLogResource> saveList = new List<CS_CallLogResource>();
                IList<CS_CallLogCallCriteriaEmail> emailSaveList = new List<CS_CallLogCallCriteriaEmail>();

                IList<EmailVO> resourceList = _callCriteriaModel.ListReceiptsByCallLog(firstAlert.CallTypeID.ToString(), firstAlert.JobID, firstAlert);

                for (int i = 0; i < resourceList.Count; i++)
                {
                    // Because of the Type, we need to separate the PersonID in two different variables
                    int? employeeId = null;
                    int? contactId = null;
                    if (resourceList[i].Type == (int)Globals.CallCriteria.EmailVOType.Employee)
                        employeeId = resourceList[i].PersonID;
                    else
                        contactId = resourceList[i].PersonID;

                    CS_CallLogResource resource = new CS_CallLogResource()
                    {
                        CallLogID = firstAlert.ID,
                        EmployeeID = employeeId,
                        ContactID = contactId,
                        JobID = firstAlert.JobID,
                        Type = resourceList[i].Type,
                        CreatedBy = firstAlert.CreatedBy,
                        CreationDate = DateTime.Now,
                        ModifiedBy = firstAlert.ModifiedBy,
                        ModificationDate = DateTime.Now,
                        Active = true
                    };

                    saveList.Add(resource);

                    CS_CallLogCallCriteriaEmail emailResource = new CS_CallLogCallCriteriaEmail()
                    {
                        CallLogID = firstAlert.ID,
                        Name = resourceList[i].Name,
                        Email = resourceList[i].Email,
                        Status = (int)Globals.CallCriteria.CallCriteriaEmailStatus.Pending,
                        StatusDate = DateTime.Now,
                        //CreationID = ,
                        CreatedBy = firstAlert.CreatedBy,
                        CreationDate = DateTime.Now,
                        //ModificationID,
                        ModifiedBy = firstAlert.ModifiedBy,
                        ModificationDate = DateTime.Now,
                        Active = true
                    };

                    emailSaveList.Add(emailResource);
                }

                _callLogResourceRepository.AddList(saveList);

                _callLogCallCriteriaEmailRepository.AddList(emailSaveList);

                return resourceList;
            }
            catch (Exception ex)
            {
                throw new Exception("There was an error while trying to save the First Alert Resources.", ex);
            }
        }
        private void SaveCloningCallLog(int cloningId, int newJobId)
        {
            CallLogModel model = new CallLogModel(_unitOfWork);

            CS_CallType callType = model.GetCallTypeByDescription("Job Cloning");
            CS_Job oldJob = _jobRepository.Get(e => e.ID == cloningId);

            CS_CallLog oldJobLog = new CS_CallLog()
            {
                JobID = cloningId,
                CallTypeID = callType.ID,
                PrimaryCallTypeId = callType.CS_PrimaryCallType_CallType.First(e => e.CallTypeID == callType.ID).PrimaryCallTypeID,
                CallDate = NewJob.CreationDate,
                Note = string.Format("Job # {0} has been cloned to Job # {1}", oldJob.NumberOrInternalTracking, NewJob.NumberOrInternalTracking),
                CreatedBy = NewJob.CreatedBy,
                CreationDate = NewJob.CreationDate,
                ModifiedBy = NewJob.ModifiedBy,
                ModificationDate = NewJob.ModificationDate,
                Active = true,
                ShiftTransferLog = false
            };

            _callLogRepository.Add(oldJobLog);

            CS_CallLog newJobLog = new CS_CallLog()
            {
                JobID = newJobId,
                CallTypeID = oldJobLog.CallTypeID,
                PrimaryCallTypeId = oldJobLog.PrimaryCallTypeId,
                CallDate = oldJobLog.CreationDate,
                Note = oldJobLog.Note,
                CreatedBy = oldJobLog.CreatedBy,
                CreationDate = oldJobLog.CreationDate,
                ModifiedBy = oldJobLog.ModifiedBy,
                ModificationDate = oldJobLog.ModificationDate,
                Active = true,
                ShiftTransferLog = false
            };

            _callLogRepository.Add(newJobLog);
        }
        /// <summary>
        /// Create the Lapsed Preset Call Entry
        /// </summary>
        /// <param name="job"></param>
        public void SavelapsedPreset(CS_Job job)
        {
            try
            {
                CS_CallLog newCallEntry = new CS_CallLog();
                newCallEntry.JobID = job.ID;
                newCallEntry.CallTypeID = (int)Globals.CallEntry.CallType.LapsedPreset;
                newCallEntry.PrimaryCallTypeId = (int)Globals.CallEntry.PrimaryCallType.JobUpdateNotification;
                newCallEntry.CallDate = DateTime.Now;
                DateTimeOffset dateTimeOffset = DateTimeOffset.Now;
                newCallEntry.Xml = null;
                newCallEntry.Note = BuildlapsedPresetNote(job);
                newCallEntry.CreatedBy = "System";
                newCallEntry.CreationDate = DateTime.Now;
                newCallEntry.ModifiedBy = "System";
                newCallEntry.ModificationDate = DateTime.Now;
                newCallEntry.Active = true;
                newCallEntry.UserCall = true;

                _callLogRepository.Add(newCallEntry);
            }
            catch (Exception ex)
            {
                throw new Exception("There was an error while trying to save a new call entry of type Lapsed Preset.", ex);
            }
        }
        public void SaveCallCriteriaInitialAdviseCallCriteriaEmailResources(CS_CallLog initialAdvise)
        {
            try
            {
                IList<CS_CallLogCallCriteriaEmail> emailSaveList = new List<CS_CallLogCallCriteriaEmail>();

                IList<EmailVO> resourceList = _callCriteriaModel.ListReceiptsByCallLog(initialAdvise.CallTypeID.ToString(), initialAdvise.JobID, initialAdvise);

                for (int i = 0; i < resourceList.Count; i++)
                {
                    // Because of the Type, we need to separate the PersonID in two different variables
                    int? employeeId = null;
                    int? contactId = null;
                    if (resourceList[i].Type == (int)Globals.CallCriteria.EmailVOType.Employee)
                        employeeId = resourceList[i].PersonID;
                    else
                        contactId = resourceList[i].PersonID;

                    CS_CallLogCallCriteriaEmail emailResource = new CS_CallLogCallCriteriaEmail()
                    {
                        CallLogID = initialAdvise.ID,
                        Name = resourceList[i].Name,
                        Email = resourceList[i].Email,
                        Status = (int)Globals.CallCriteria.CallCriteriaEmailStatus.Pending,
                        StatusDate = DateTime.Now,
                        //CreationID = ,
                        CreatedBy = initialAdvise.CreatedBy,
                        CreationDate = DateTime.Now,
                        //ModificationID,
                        ModifiedBy = initialAdvise.ModifiedBy,
                        ModificationDate = DateTime.Now,
                        Active = true
                    };

                    emailSaveList.Add(emailResource);
                }

                _callLogCallCriteriaEmailRepository.AddList(emailSaveList);
            }
            catch (Exception ex)
            {
                throw new Exception("There was an error while trying to save the Initial Advise Resources.", ex);
            }
        }
        public IList<CS_Contact> VerifyHeavyEquipmentCallCriteria(List<CS_Contact> contactList, CS_CallLog callLog)
        {
            List<CS_Contact> returnList = new List<CS_Contact>();
            bool hasHeavyEquipment = false;
            bool hasNonHeavyEquipment = false;
            bool hasEquipment = false;

            if (callLog.CS_CallLogResource.Any(e => e.CS_Equipment != null && e.CS_Equipment.HeavyEquipment))
            {
                hasHeavyEquipment = true;
                hasEquipment = true;
            }

            if (callLog.CS_CallLogResource.Any(e => e.CS_Equipment != null && !e.CS_Equipment.HeavyEquipment))
            {
                hasNonHeavyEquipment = true;
                hasEquipment = true;
            }

            returnList.AddRange(contactList.FindAll(e => e.Active
                                    && ((e.CS_CallCriteria.FirstOrDefault
                                        (
                                        w => w.Active && w.ContactID == e.ID).CS_CallCriteriaValue.Any
                                        (
                                        h => h.Active
                                            && h.CallCriteriaTypeID == (int)Globals.CallCriteria.CallCriteriaType.HeavyEquipment
                                            && bool.Parse(h.Value)
                                            && hasHeavyEquipment))
                                    || (e.CS_CallCriteria.First
                                        (
                                        w => w.Active && w.ContactID == e.ID).CS_CallCriteriaValue).Any(
                                        h => h.Active
                                            && h.CallCriteriaTypeID == (int)Globals.CallCriteria.CallCriteriaType.HeavyEquipment) == false)));

            returnList.AddRange(contactList.FindAll(e => e.Active
                                    && ((e.CS_CallCriteria.FirstOrDefault
                                        (
                                        w => w.Active && w.ContactID == e.ID).CS_CallCriteriaValue.Any
                                        (
                                        h => h.Active
                                            && h.CallCriteriaTypeID == (int)Globals.CallCriteria.CallCriteriaType.NonHeavyEquipment
                                            && bool.Parse(h.Value)
                                            && hasNonHeavyEquipment))
                                    || (e.CS_CallCriteria.First
                                        (
                                        w => w.Active && w.ContactID == e.ID).CS_CallCriteriaValue).Any(
                                        h => h.Active
                                            && h.CallCriteriaTypeID == (int)Globals.CallCriteria.CallCriteriaType.NonHeavyEquipment) == false)));

            returnList.AddRange(contactList.FindAll(e => e.Active
                                    && ((e.CS_CallCriteria.FirstOrDefault
                                        (
                                        w => w.Active && w.ContactID == e.ID).CS_CallCriteriaValue.Any
                                        (
                                        h => h.Active
                                            && h.CallCriteriaTypeID == (int)Globals.CallCriteria.CallCriteriaType.AllEquipment
                                            && bool.Parse(h.Value)
                                            && hasEquipment))
                                    || (e.CS_CallCriteria.First
                                        (
                                        w => w.Active && w.ContactID == e.ID).CS_CallCriteriaValue).Any(
                                        h => h.Active
                                            && h.CallCriteriaTypeID == (int)Globals.CallCriteria.CallCriteriaType.AllEquipment) == false)));

            return returnList;
        }
        /// <summary>
        /// Set all values to the CS_CallLog entity
        /// </summary>
        /// <returns>CS_CallLog</returns>
        public CS_CallLog SetCallLogDPIProcess(CS_DPI currentDPI)
        {
            CS_CallLog callLog = new CS_CallLog();

            callLog.Active = true;
            callLog.PrimaryCallTypeId = (int)Globals.CallEntry.PrimaryCallType.JobUpdateNotification;
            callLog.CallDate = DateTime.Now;
            callLog.CalledInByCustomer = null;
            callLog.CalledInByEmployee = null;
            callLog.CallTypeID = (int)Globals.CallEntry.CallType.DPIApproved;
            callLog.CreatedBy = currentDPI.ModifiedBy;
            callLog.CreationDate = currentDPI.ModificationDate;
            //callLog.CreationID = null;
            callLog.HasGeneralLog = null;
            callLog.JobID = currentDPI.JobID;
            callLog.ModificationDate = currentDPI.ModificationDate;
            //callLog.ModificationID
            callLog.ModifiedBy = currentDPI.ModifiedBy;
            callLog.Note = GenerateDPIProcessNote(currentDPI);
            callLog.ShiftTransferLog = null;
            callLog.UserCall = true;
            callLog.Xml = null;

            return callLog;
        }
        public void SendCallLogNotificationReservedEmails(CS_CallLog callLogEntry, List<CS_Reserve> resources)
        {
            try
            {
                EmailModel emailModel = new EmailModel(_unitOfWork);
                IList<CS_Email> emails = new List<CS_Email>();
                string receipts = string.Empty;

                //List receipts
                IList<EmailVO> receiptsEmail = _callCriteriaModel.ListReceiptsByCallLog(callLogEntry.CallTypeID.ToString(), callLogEntry.JobID, callLogEntry);

                if (receiptsEmail.Count > 0)
                {
                    for (int i = 0; i < receiptsEmail.Count; i++)
                        receipts += (i == 0) ? receiptsEmail[i].Email : string.Format(";{0}", receiptsEmail[i].Email);

                    //Body
                    string body = GenerateEmailBodyForReservedResources(callLogEntry, resources);

                    //Subject
                    string subject = GenerateEmailSubjectForReservedResources(callLogEntry);

                    //Save Email
                    emailModel.SaveEmailList(receipts, subject, body, "System", Globals.Security.SystemEmployeeID);

                    //Save Call Citeria
                    _callCriteriaModel.SendCallLogCriteriaEmails(callLogEntry);
                }
            }
            catch (Exception e)
            {
                throw new Exception("There was an error while trying to send added resources notification!", e);
            }
        }
 /// <summary>
 /// Saves CallCriteria Email for a callLog
 /// </summary>
 /// <param name="callLogEntry"></param>
 public void SendCallLogCriteriaEmails(CS_CallLog callLogEntry)
 {
     if (null != callLogEntry)
     {
         List<EmailVO> lstEmailVO = ListReceiptsByCallLog(callLogEntry.CallTypeID.ToString(), callLogEntry.JobID, callLogEntry).ToList();
         if (null != lstEmailVO && lstEmailVO.Count > 0)
             _callLogModel.SaveCallLogCallCriteriaEmail(lstEmailVO, callLogEntry);
     }
 }
        public virtual void GenerateAutomaticCallEntryReserve(int jobId, string userName, IList<CS_Reserve> reservedResourceList, DateTime callDate)
        {
            BuildReservedResourceNote(reservedResourceList, jobId);
            CS_CallLog addedResourceCallLogEntry = new CS_CallLog()
            {
                JobID = jobId,
                CallTypeID = (int)Globals.CallEntry.CallType.ReservedResource,
                PrimaryCallTypeId = (jobId == Globals.GeneralLog.ID ? (int)Globals.CallEntry.PrimaryCallType.ResourceUpdate : (int)Globals.CallEntry.PrimaryCallType.ResourceUpdateAddedResources),
                CallDate = callDate,
                Xml = null,
                Note = _reservedResourceBuilder.ToString(),
                CreatedBy = userName,
                CreationDate = DateTime.Now,
                ModifiedBy = userName,
                ModificationDate = DateTime.Now,
                Active = true,
                UserCall = true
            };

            addedResourceCallLogEntry = _callLogRepository.Add(addedResourceCallLogEntry);

            SendCallLogNotificationReservedEmails(addedResourceCallLogEntry, reservedResourceList.ToList());
        }
        public virtual void GenerateAutomaticCallEntryInitialAdvise(int jobId, string userName)
        {
            BuildInitialAdviseNote(jobId);
            CS_CallLog addedResourceCallLogEntry = new CS_CallLog()
            {
                JobID = jobId,
                CallTypeID = (int)Globals.CallEntry.CallType.InitialAdviseUpdate,
                PrimaryCallTypeId = (jobId == Globals.GeneralLog.ID ? (int)Globals.CallEntry.PrimaryCallType.NonJobUpdateNotification : (int)Globals.CallEntry.PrimaryCallType.JobUpdateNotification),
                CallDate = DateTime.Now,
                Xml = null,
                Note = _initialAdviseBuilder.ToString(),
                CreatedBy = userName,
                CreationDate = DateTime.Now,
                ModifiedBy = userName,
                ModificationDate = DateTime.Now,
                Active = true,
                UserCall = true
            };

            _callLogRepository.Add(addedResourceCallLogEntry);
        }
        public virtual void GenerateAutomaticCallEntryAdd(int jobId, string userName, IList<CS_Resource> addedResourceList, DateTime callDate)
        {
            List<int> employees = new List<int>();
            List<int> equipments = new List<int>();
            List<CS_CallLogResource> callLogResources = new List<CS_CallLogResource>();

            BuildAddedResourceNote(addedResourceList, jobId);
            CS_CallLog addedResourceCallLogEntry = new CS_CallLog()
            {
                JobID = jobId,
                CallTypeID = (int)Globals.CallEntry.CallType.AddedResource,
                PrimaryCallTypeId = (jobId == Globals.GeneralLog.ID ? (int)Globals.CallEntry.PrimaryCallType.ResourceUpdate : (int)Globals.CallEntry.PrimaryCallType.ResourceUpdateAddedResources),
                CallDate = callDate,
                Xml = null,
                Note = _addedResourceBuilder.ToString(),
                CreatedBy = userName,
                CreationDate = DateTime.Now,
                ModifiedBy = userName,
                ModificationDate = DateTime.Now,
                Active = true
            };

            _callLogRepository.Add(addedResourceCallLogEntry);

            foreach (CS_Resource resource in addedResourceList)
            {
                Globals.CallEntry.CallLogResourceType type = Globals.CallEntry.CallLogResourceType.Employee;
                switch ((Globals.ResourceAllocation.ResourceType)resource.Type)
                {
                    case Globals.ResourceAllocation.ResourceType.Employee:
                        type = Globals.CallEntry.CallLogResourceType.Employee;
                        break;
                    case Globals.ResourceAllocation.ResourceType.Equipment:
                        type = Globals.CallEntry.CallLogResourceType.Equipment;
                        break;
                }

                CS_CallLogResource addedResourceEntry = new CS_CallLogResource()
                {
                    CallLogID = addedResourceCallLogEntry.ID,
                    EmployeeID = resource.EmployeeID,
                    EquipmentID = resource.EquipmentID,
                    ContactID = null,
                    JobID = jobId,
                    Type = (int)type,
                    ActionDate = resource.StartDateTime,
                    CreatedBy = addedResourceCallLogEntry.CreatedBy,
                    CreationDate = addedResourceCallLogEntry.CreationDate,
                    ModifiedBy = addedResourceCallLogEntry.ModifiedBy,
                    ModificationDate = addedResourceCallLogEntry.ModificationDate,
                    Active = true,
                    CreationID = addedResourceCallLogEntry.CreationID,
                    ModificationID = addedResourceCallLogEntry.ModificationID
                };

                addedResourceEntry = _callLogResourceRepository.Add(addedResourceEntry);

                callLogResources.Add(addedResourceEntry);

                if (resource.EmployeeID.HasValue)
                    employees.Add(resource.EmployeeID.Value);
                else
                    equipments.Add(resource.EquipmentID.Value);

            }

            employees = addedResourceList.Where(e => e.EmployeeID.HasValue).Select(e => e.EmployeeID.Value).ToList();
            equipments = addedResourceList.Where(e => e.EquipmentID.HasValue).Select(e => e.EquipmentID.Value).ToList();

            SendCallLogNotificationAddedEmails(addedResourceCallLogEntry, callLogResources);

            _callLogModel.VerifyDPICalculate(addedResourceCallLogEntry, employees, equipments);
        }
        public void VerifyDPICalculateAdded()
        {
            //Arrange
            #region [ Variables ]

            DateTime now = DateTime.Now;
            DateTime startDateTime = new DateTime(2011, 08, 01, 12, 0, 0);
            DateTime startDateTime2 = startDateTime.AddDays(1);

            #endregion

            #region [ CallType Repository ]

            FakeObjectSet<CS_CallType> fakeCallTypeRepository = new FakeObjectSet<CS_CallType>();
            fakeCallTypeRepository.AddObject
                (
                    new CS_CallType()
                    {
                        ID = 27,
                        Description = "Added Resource",
                        Xml = string.Empty,
                        CallCriteria = true,
                        IsAutomaticProcess = true,
                        DpiStatus = 1,
                        Active = true
                    }
                );

            #endregion

            #region [ Resource Repository ]

            FakeObjectSet<CS_Resource> fakeResourceRepository = new FakeObjectSet<CS_Resource>();
            fakeResourceRepository.AddObject(new CS_Resource() { ID = 1, EmployeeID = 1, EquipmentID = null, JobID = 1, Duration = 1, StartDateTime = startDateTime, Active = true });
            fakeResourceRepository.AddObject(new CS_Resource() { ID = 2, EmployeeID = null, EquipmentID = 1, JobID = 1, Duration = 1, StartDateTime = startDateTime, Active = true });
            fakeResourceRepository.AddObject(new CS_Resource() { ID = 3, EmployeeID = null, EquipmentID = 2, JobID = 1, Duration = 1, StartDateTime = startDateTime, Active = true });
            fakeResourceRepository.AddObject(new CS_Resource() { ID = 4, EmployeeID = null, EquipmentID = 3, JobID = 1, Duration = 1, StartDateTime = startDateTime2, Active = true });

            #endregion

            #region [ DPI Repository ]

            FakeObjectSet<CS_DPI> fakeDPIRepository = new FakeObjectSet<CS_DPI>();
            fakeDPIRepository.AddObject(new CS_DPI()
            {
                ID = 1,
                Date = startDateTime.Date,
                Calculate = false,
                ProcessStatus = (int)Globals.DPI.DpiStatus.DraftSaved,
                JobID = 1,
                IsContinuing = true,
                ProcessStatusDate = DateTime.Now,
                CalculationStatus = (short)Globals.DPI.CalculationStatus.INSF,
                Total = 1000,
                CreatedBy = "System",
                //CreationID =,
                CreationDate = DateTime.Now,
                ModifiedBy = "System",
                //ModificationID,
                ModificationDate = DateTime.Now,
                Active = true,
                CS_DPIResource = new EntityCollection<CS_DPIResource>()
                {
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EmployeeID = 1,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 1,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 2,
                        Active = true,
                    }
                }
            });

            fakeDPIRepository.AddObject(new CS_DPI()
            {
                ID = 2,
                Date = startDateTime2.Date,
                Calculate = false,
                ProcessStatus = (int)Globals.DPI.DpiStatus.DraftSaved,
                JobID = 1,
                IsContinuing = true,
                ProcessStatusDate = DateTime.Now,
                CalculationStatus = (short)Globals.DPI.CalculationStatus.INSF,
                Total = 1000,
                CreatedBy = "System",
                //CreationID =,
                CreationDate = DateTime.Now,
                ModifiedBy = "System",
                //ModificationID,
                ModificationDate = DateTime.Now,
                Active = true,
                CS_DPIResource = new EntityCollection<CS_DPIResource>()
                {
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EmployeeID = 1,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 1,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 2,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 3,
                        Active = true
                    }
                }
            });

            #endregion

            #region [ Parameters ]

            CS_CallLog callLog = new CS_CallLog()
            {
                CallTypeID = (int)Globals.CallEntry.CallType.AddedResource,
                CreationDate = now,
                CallDate = now,
                JobID = 1
            };

            List<int> employeeIDList = new List<int>() { 1 };
            List<int> equipmentIDList = new List<int>() { 1, 2 };

            #endregion

            #region [ Mock ]

            Mock<IUnitOfWork> mockUnitOfWork = new Mock<IUnitOfWork>();
            mockUnitOfWork.Setup(e => e.CreateObjectSet<CS_CallType>()).Returns(fakeCallTypeRepository);
            mockUnitOfWork.Setup(e => e.CreateObjectSet<CS_Resource>()).Returns(fakeResourceRepository);
            mockUnitOfWork.Setup(e => e.CreateObjectSet<CS_DPI>()).Returns(fakeDPIRepository);
            CallLogModel model = new CallLogModel(mockUnitOfWork.Object);

            #endregion

            //Act
            model.VerifyDPICalculate(callLog, employeeIDList, equipmentIDList);

            //Assert
            CS_DPI dpi = fakeDPIRepository.FirstOrDefault(e => e.ID == 1);
            CS_DPI dpi2 = fakeDPIRepository.FirstOrDefault(e => e.ID == 2);
            Assert.IsTrue(dpi.Calculate, "Fail at Calculate True");
            Assert.IsFalse(dpi2.Calculate, "Fail at Calculate False");
        }
 public IList<EmailVO> ListReceiptsByCallLog(string callLogTypeId, int jobId, CS_CallLog callLog)
 {
     List<int> callCriteriaIDs = new List<int>();
     return ListReceiptsByCallLog(callLogTypeId, jobId, callLog, out callCriteriaIDs);
 }
        public void VerifyDPICalculateParked()
        {
            //Arrange
            #region [ Variables ]

            DateTime now = DateTime.Now;
            DateTime startDateTime = new DateTime(2011, 08, 01, 12, 0, 0);
            DateTime startDateTime2 = startDateTime.AddDays(1);

            #endregion

            #region [ CallType Repository ]

            FakeObjectSet<CS_CallType> fakeCallTypeRepository = new FakeObjectSet<CS_CallType>();
            fakeCallTypeRepository.AddObject
                (
                    new CS_CallType()
                    {
                        ID = (int)Globals.CallEntry.CallType.Parked,
                        Description = "Parked",
                        Xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>  <DynamicFieldsAggregator xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">    <Controls>      <DynamicControls xsi:type=\"DynamicDatePickerXml\">        <Name>dtpDate</Name>        <IsValidEmpty>false</IsValidEmpty>        <EmptyValueMessage>The Parked Date field is required</EmptyValueMessage>        <InvalidValueMessage>Invalid Parked Date format</InvalidValueMessage>        <DateTimeFormat>Default</DateTimeFormat>        <ShowOn>Both</ShowOn>        <ValidationGroup>CallEntry</ValidationGroup>        <Label>          <Text>Parked Date:</Text>          <Css>dynamicLabel</Css>        </Label>      </DynamicControls>      <DynamicControls xsi:type=\"DynamicTimeXml\">        <Name>txtTime</Name>        <IsValidEmpty>false</IsValidEmpty>        <ValidationGroup>CallEntry</ValidationGroup>        <EmptyValueMessage>The Parked Time field is required.</EmptyValueMessage>        <InvalidValueMessage>The Parked Time field is invalid</InvalidValueMessage>        <MaskedType>Time</MaskedType>        <Mask>99:99</Mask>        <Label>          <Text>Parked Time:</Text>          <Css>dynamicLabel</Css>        </Label>      </DynamicControls>      <DynamicControls xsi:type=\"DynamicCountableTextBoxXml\">        <Name>txtNote</Name>        <IsRequired>false</IsRequired>        <MaxChars>255</MaxChars>        <MaxCharsWarning>250</MaxCharsWarning>        <TextMode>MultiLine</TextMode>        <Width>300</Width>        <Height>150</Height>        <Label>          <Text>Note:</Text>          <Css>dynamicLabel</Css>        </Label>      </DynamicControls>    </Controls>  </DynamicFieldsAggregator>",
                        CallCriteria = false,
                        IsAutomaticProcess = false,
                        DpiStatus = 2,
                        Active = true
                    }
                );

            #endregion

            #region [ Resource Repository ]

            FakeObjectSet<CS_Resource> fakeResourceRepository = new FakeObjectSet<CS_Resource>();
            fakeResourceRepository.AddObject(new CS_Resource() { ID = 1, EmployeeID = 1, EquipmentID = null, JobID = 1, Duration = 1, StartDateTime = startDateTime, Active = true });
            fakeResourceRepository.AddObject(new CS_Resource() { ID = 2, EmployeeID = null, EquipmentID = 1, JobID = 1, Duration = 1, StartDateTime = startDateTime, Active = true });
            fakeResourceRepository.AddObject(new CS_Resource() { ID = 3, EmployeeID = null, EquipmentID = 2, JobID = 1, Duration = 1, StartDateTime = startDateTime, Active = true });
            fakeResourceRepository.AddObject(new CS_Resource() { ID = 4, EmployeeID = null, EquipmentID = 3, JobID = 1, Duration = 1, StartDateTime = startDateTime2, Active = true });

            #endregion

            #region [ DPI Repository ]

            FakeObjectSet<CS_DPI> fakeDPIRepository = new FakeObjectSet<CS_DPI>();
            fakeDPIRepository.AddObject(new CS_DPI()
            {
                ID = 1,
                Date = startDateTime.Date,
                Calculate = false,
                ProcessStatus = (int)Globals.DPI.DpiStatus.DraftSaved,
                JobID = 1,
                IsContinuing = true,
                ProcessStatusDate = DateTime.Now,
                CalculationStatus = (short)Globals.DPI.CalculationStatus.INSF,
                Total = 1000,
                CreatedBy = "System",
                //CreationID =,
                CreationDate = DateTime.Now,
                ModifiedBy = "System",
                //ModificationID,
                ModificationDate = DateTime.Now,
                Active = true,
                CS_DPIResource = new EntityCollection<CS_DPIResource>()
                {
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EmployeeID = 1,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 1,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 2,
                        Active = true,
                    }
                }
            });

            fakeDPIRepository.AddObject(new CS_DPI()
            {
                ID = 2,
                Date = startDateTime2.Date,
                Calculate = false,
                ProcessStatus = (int)Globals.DPI.DpiStatus.DraftSaved,
                JobID = 1,
                IsContinuing = true,
                ProcessStatusDate = DateTime.Now,
                CalculationStatus = (short)Globals.DPI.CalculationStatus.INSF,
                Total = 1000,
                CreatedBy = "System",
                //CreationID =,
                CreationDate = DateTime.Now,
                ModifiedBy = "System",
                //ModificationID,
                ModificationDate = DateTime.Now,
                Active = true,
                CS_DPIResource = new EntityCollection<CS_DPIResource>()
                {
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EmployeeID = 1,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 1,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 2,
                        Active = true
                    },
                    new CS_DPIResource()
                    {
                        ID = 1,
                        DPIID = 1,
                        EquipmentID = 3,
                        Active = true
                    }
                }
            });

            #endregion

            #region [ Parameters ]

            CS_CallLog callLog = new CS_CallLog()
            {
                CallTypeID = (int)Globals.CallEntry.CallType.Parked,
                Xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><DynamicFieldsAggregator xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><Controls><DynamicControls xsi:type=\"DynamicDatePickerXml\"><Name>dtpDate</Name><Label><Text>Release Date:</Text><Css>dynamicLabel</Css><Style /></Label><Css /><Style /><Visible>true</Visible><Text>2011-08-01T00:00:00</Text><IsValidEmpty>false</IsValidEmpty><EmptyValueMessage>The Release Date field is required</EmptyValueMessage><InvalidValueMessage>Invalid Release Date format</InvalidValueMessage><DateTimeFormat>Default</DateTimeFormat><ShowOn>Both</ShowOn><ValidationGroup>CallEntry</ValidationGroup></DynamicControls><DynamicControls xsi:type=\"DynamicTimeXml\"><Name>txtTime</Name><Label><Text>Release Time:</Text><Css>dynamicLabel</Css><Style /></Label><Css /><Style /><Visible>true</Visible><Text>12:00</Text><Mask>99:99</Mask><MaskedType>Time</MaskedType><InputDirection>LeftToRight</InputDirection><IsValidEmpty>false</IsValidEmpty><ValidationGroup>CallEntry</ValidationGroup><InvalidValueMessage>The Release Time field is invalid</InvalidValueMessage><EmptyValueMessage>The Release Time field is required.</EmptyValueMessage></DynamicControls></Controls><Extenders /></DynamicFieldsAggregator>",
                CreationDate = now,
                CallDate = now,
                JobID = 1
            };

            List<int> employeeIDList = new List<int>() { 1 };
            List<int> equipmentIDList = new List<int>() { 1, 2, 3 };

            #endregion

            #region [ Mock ]

            Mock<IUnitOfWork> mockUnitOfWork = new Mock<IUnitOfWork>();
            mockUnitOfWork.Setup(e => e.CreateObjectSet<CS_CallType>()).Returns(fakeCallTypeRepository);
            mockUnitOfWork.Setup(e => e.CreateObjectSet<CS_Resource>()).Returns(fakeResourceRepository);
            mockUnitOfWork.Setup(e => e.CreateObjectSet<CS_DPI>()).Returns(fakeDPIRepository);
            CallLogModel model = new CallLogModel(mockUnitOfWork.Object);

            #endregion

            //Act
            model.VerifyDPICalculate(callLog, employeeIDList, equipmentIDList);

            //Assert
            CS_DPI dpi = fakeDPIRepository.FirstOrDefault(e => e.ID == 1);
            CS_DPI dpi2 = fakeDPIRepository.FirstOrDefault(e => e.ID == 2);
            Assert.IsTrue(dpi.Calculate, "Fail at Calculate True");
            Assert.IsFalse(dpi2.Calculate, "Fail at Calculate False");
        }
        public IList<EmailVO> ListReceiptsByCallLog(string callLogTypeId, int jobId, CS_CallLog callLog, out List<int> callCriteriaIDs)
        {
            CS_Job job = new CS_Job();
            IList<CS_Employee> lstEmployee = new List<CS_Employee>();
            List<CS_Employee> lstEmployeeAux = new List<CS_Employee>();
            IList<CS_Contact> lstContacts = new List<CS_Contact>();
            IList<EmailVO> lstEmail = new List<EmailVO>();

            string emailDomain = string.Empty;

            SettingsModel model = new SettingsModel(_unitOfWork);
            emailDomain = model.GetDomain();

            CS_CallCriteriaRepository _rep = new CS_CallCriteriaRepository(_callCriteriaRepository, _callCriteriaRepository.UnitOfWork);

            int callLogID = 0;

            if (callLog != null)
                callLogID = callLog.ID;

            IList<CS_SP_CheckCallCriteria_Result> callCriteriaResult = _rep.CheckCallCriteria(callLogID, int.Parse(callLogTypeId), jobId);

            IList<int> result = new List<int>();

            for (int i = 0; i < callCriteriaResult.Count; i++)
            {
                result.Add(callCriteriaResult[i].CallCriteriaID.Value);
            }

            callCriteriaIDs = result.ToList();

            lstEmployee = _employeeRepository.ListAll(e => e.CS_CallCriteria.Any(f => result.Contains(f.ID) && f.Active)).ToList();

            lstContacts = _contactRepository.ListAll(e => e.CS_CallCriteria.Any(f => result.Contains(f.ID) && f.Active)).ToList();

            //OLD METHOD
            //job = _jobRepository.Get(e => e.ID == jobId, new string[] { "CS_JobDivision", "CS_CustomerInfo", "CS_JobInfo", "CS_LocationInfo", "CS_JobDescription" });

            //lstEmployee = ListEmployeeCriteriaByDivisionAndCustomer(job);

            //if (!job.ID.Equals(Globals.GeneralLog.ID))
            //    lstEmployeeAux = FilterEmployeeByCriteriaValue(lstEmployee, job).ToList();

            //if (null != callLog)
            //    lstEmployeeAux.AddRange(VerifyHeavyEquipmentCallCriteria(lstEmployee.ToList(), callLog));

            //lstEmployee = lstEmployeeAux.Distinct().ToList();

            //lstEmployee = ListEmployeeByCallLogCriteria(callLogTypeId, lstEmployee.ToList());

            //for (int i = 0; i < lstEmployee.Count; i++)
            //{

            //    CS_EmployeeOffCallHistory offCall = GetActiveOffCallByEmployeeID(lstEmployee[i].ID);

            //    if (null != offCall)
            //        lstEmployee[i] = offCall.CS_Employee_Proxy;
            //}

            //lstContacts = ListContactsCriteriaByDivisionAndCustomer(job);

            //if (!job.ID.Equals(Globals.GeneralLog.ID))
            //    lstContacts = FilterContactsByCriteriaValue(lstContacts, job);

            //lstContacts = ListCustomerContactByCallLogCriteria(callLogTypeId, lstContacts.ToList());

            //if (null != callLog)
            //    lstContacts = VerifyHeavyEquipmentCallCriteria(lstContacts.ToList(), callLog);

            for (int i = 0; i < lstEmployee.Count; i++)
            {
                if (!string.IsNullOrEmpty(lstEmployee[i].GetEmployeeEmail(emailDomain)))
                {
                    EmailVO email = new EmailVO();
                    email.PersonID = lstEmployee[i].ID;
                    email.Name = lstEmployee[i].FullName;
                    email.Email = lstEmployee[i].GetEmployeeEmail(emailDomain);
                    email.Type = (int)Globals.CallCriteria.EmailVOType.Employee;

                    if (!lstEmail.Contains(email, new Globals.EmailService.EmailVO_Comparer()))
                        lstEmail.Add(email);
                }
            }

            for (int i = 0; i < lstContacts.Count; i++)
            {
                if (!string.IsNullOrEmpty(lstContacts[i].Email))
                {
                    EmailVO email = new EmailVO();
                    email.PersonID = lstContacts[i].ID;
                    email.Name = lstContacts[i].FullName;
                    email.Email = lstContacts[i].Email;
                    email.Type = (int)Globals.CallCriteria.EmailVOType.Contact;

                    if (!lstEmail.Contains(email, new Globals.EmailService.EmailVO_Comparer()))
                        lstEmail.Add(email);
                }
            }

            return lstEmail;
        }
        public void UpdateDpiTimeArrival(CS_CallLog callLog, Globals.CallEntry.CallType type)
        {
            CallLogModel model;
            DateTime actionDate = new DateTime();

            using (model = new CallLogModel())
            {
                actionDate = model.GetCallLogActionDateTime(callLog.Xml).Value;
            }

            if (!actionDate.Equals(new DateTime()))
            {
                DateTime date = actionDate.Date;
                CS_DPI datedDPI = _dpiRepository.Get(e => e.Date == date && e.JobID == callLog.JobID);
                CS_DPI newDPI;

                if (null != datedDPI)
                {
                    newDPI = new CS_DPI()
                    {
                        ApprovedBy = datedDPI.ApprovedBy,
                        Calculate = datedDPI.Calculate,
                        CalculationStatus = datedDPI.CalculationStatus,
                        CreatedBy = datedDPI.CreatedBy,
                        CreationDate = datedDPI.CreationDate,
                        CreationID = datedDPI.CreationID,
                        Date = datedDPI.Date,
                        FirstATA = datedDPI.FirstATA,
                        FirstETA = datedDPI.FirstETA,
                        ID = datedDPI.ID,
                        IsContinuing = datedDPI.IsContinuing,
                        JobID = datedDPI.JobID,
                        ModificationDate = datedDPI.ModificationDate,
                        ModificationID = datedDPI.ModificationID,
                        ModifiedBy = datedDPI.ModifiedBy,
                        ProcessStatus = datedDPI.ProcessStatus,
                        ProcessStatusDate = datedDPI.ProcessStatusDate,
                        Total = datedDPI.Total
                    };

                    if (type == Globals.CallEntry.CallType.ETA)
                    {
                        if (!newDPI.FirstETA.HasValue || actionDate < newDPI.FirstETA.Value)
                        {
                            newDPI.FirstETA = actionDate;

                            _dpiRepository.Update(newDPI);
                        }
                    }
                    else
                    {
                        if (!newDPI.FirstATA.HasValue || actionDate < newDPI.FirstATA.Value)
                        {
                            newDPI.FirstATA = actionDate;

                            _dpiRepository.Update(newDPI);
                        }
                    }
                }
            }
        }
        public void TestGenerateBodyCallLogEmail()
        {
            List<CS_CallLog> lstCallLog = new List<CS_CallLog>();

            CS_CallType callType = new CS_CallType { ID = 5, Active = true, Description = "Call Type 1" };

            DateTime dt = new DateTime(2011, 05, 10, 1, 11, 22);

            CS_CallLog callLog = new CS_CallLog
                                     {
                                         ID = 1,
                                         Active = true,
                                         CS_CallType = callType,
                                         CallDate = dt,
                                         Note = "Here is the field note."
                                     };

            lstCallLog.Add(callLog);

            //Arrange
            FakeObjectSet<CS_CallLog> fakeCallLog = new FakeObjectSet<CS_CallLog>();
            fakeCallLog.AddObject(callLog);

            Mock<IUnitOfWork> mockUnitOfWork = new Mock<IUnitOfWork>();
            mockUnitOfWork.Setup(w => w.CreateObjectSet<CS_CallLog>()).Returns(fakeCallLog);
            CallCriteriaModel model = new CallCriteriaModel(mockUnitOfWork.Object);

            //Act
            string body = model.GenerateBodyCallLogEmail(lstCallLog);

            StringBuilder sb = new StringBuilder();
            sb.Append("<div>");
            sb.Append("<div style='width: 100%; display: inline-block;'>");
            sb.Append("<div style='text-align: right;width:30%; height:100% ;display: inline-block;float:left'><b>");
            sb.Append("Call Type:");
            sb.Append("</b></div>");
            sb.Append("<div style='text-align: left;width:68%; height:100% ;display: inline-block;float:right'>");
            sb.Append("Call Type 1");
            sb.Append("</div>");
            sb.Append("</div>");
            sb.Append("<div style='width: 100%; display: inline-block;'>");
            sb.Append("<div style='text-align: right;width:30%; height:100% ;display: inline-block;float:left'><b>");
            sb.Append("Call Date:");
            sb.Append("</b></div>");
            sb.Append("<div style='text-align: left;width:68%; height:100% ;display: inline-block;float:right'>");
            sb.Append("05/10/2011");
            sb.Append("</div>");
            sb.Append("</div>");
            sb.Append("<div style='width: 100%; display: inline-block;'>");
            sb.Append("<div style='text-align: right;width:30%; height:100% ;display: inline-block;float:left'><b>");
            sb.Append("Call Time:");
            sb.Append("</b></div>");
            sb.Append("<div style='text-align: left;width:68%; height:100% ;display: inline-block;float:right'>");
            sb.Append("1:11");
            sb.Append("</div>");
            sb.Append("</div>");
            sb.Append("<div style='width: 100%; display: inline-block;'>");
            sb.Append("<div style='text-align: right;width:30%; height:100% ;display: inline-block;float:left'><b>");
            sb.Append("Here is the field note.");
            sb.Append("</b></div>");
            sb.Append("<div style='text-align: left;width:68%; height:100% ;display: inline-block;float:right'>");
            sb.Append("</div>");
            sb.Append("</div>");
            sb.Append("</div>");

            //Assert
            Assert.AreEqual(sb.ToString(), body);
        }
 private CS_CallLog CreateDeleteCallLogEntity()
 {
     CS_CallLog oldCallLog = _callLogModel.GetCallLogById(_view.CallLogIdToDelete);
     CS_CallLog callLogToRemove = new CS_CallLog();
     callLogToRemove.ID = _view.CallLogIdToDelete;
     callLogToRemove.JobID = oldCallLog.JobID;
     callLogToRemove.CallTypeID = oldCallLog.CallTypeID;
     callLogToRemove.PrimaryCallTypeId = oldCallLog.PrimaryCallTypeId;
     callLogToRemove.CallDate = oldCallLog.CallDate;
     callLogToRemove.CalledInByEmployee = oldCallLog.CalledInByEmployee;
     callLogToRemove.CalledInByCustomer = oldCallLog.CalledInByCustomer;
     callLogToRemove.Xml = oldCallLog.Xml;
     callLogToRemove.Note = oldCallLog.Note;
     callLogToRemove.CreatedBy = oldCallLog.CreatedBy;
     callLogToRemove.CreationDate = oldCallLog.CreationDate;
     callLogToRemove.ModifiedBy = _view.UserName;
     callLogToRemove.ModificationDate = DateTime.Now;
     callLogToRemove.Active = false;
     return callLogToRemove;
 }
        public void SaveWhiteLightCallLog(CS_EquipmentWhiteLight equipmentWhiteLight, int jobID, bool add)
        {
            try
            {

                string notes = BuildWhiteLogNote(equipmentWhiteLight, add);
                CS_CallLog newCallEntry = new CS_CallLog();
                newCallEntry.JobID = jobID;
                newCallEntry.CallTypeID = (int)Globals.CallEntry.CallType.WhiteLight;

                if (jobID == Globals.GeneralLog.ID)
                    newCallEntry.PrimaryCallTypeId = (int)Globals.CallEntry.PrimaryCallType.ResourceUpdate;
                else
                    newCallEntry.PrimaryCallTypeId = (int)Globals.CallEntry.PrimaryCallType.ResourceUpdateEventStatus;

                newCallEntry.CallDate = equipmentWhiteLight.CreationDate;
                DateTimeOffset dateTimeOffset = DateTimeOffset.Now;
                newCallEntry.Xml = null;
                newCallEntry.Note = notes;
                newCallEntry.CreatedBy = equipmentWhiteLight.CreatedBy;
                newCallEntry.CreationDate = DateTime.Now;
                newCallEntry.ModifiedBy = equipmentWhiteLight.CreatedBy;
                newCallEntry.ModificationDate = DateTime.Now;
                newCallEntry.Active = true;
                newCallEntry.UserCall = true;

                newCallEntry = _callLogRepository.Add(newCallEntry);

                SaveWhiteLightCallLogResources(newCallEntry, equipmentWhiteLight);
            }
            catch (Exception ex)
            {
                throw new Exception("There was an error while trying to save a new call entry.", ex);
            }
        }
        public void SaveInitialAdvise(bool saveInitialEmailAdvise)
        {
            try
            {
                BuildInitialAdviseNote(false);
                CS_CallLog newCallEntry = new CS_CallLog();
                newCallEntry.JobID = NewJob.ID;
                newCallEntry.CallTypeID = (int)Globals.CallEntry.CallType.InitialLog;
                newCallEntry.PrimaryCallTypeId = (int)Globals.CallEntry.PrimaryCallType.ResourceUpdateAddedResources;
                newCallEntry.CallDate = NewJobInfo.InitialCallDate + NewJobInfo.InitialCallTime;
                DateTimeOffset dateTimeOffset = DateTimeOffset.Now;
                newCallEntry.Xml = null;
                newCallEntry.Note = _initialAdvise.ToString();
                newCallEntry.CreatedBy = NewJob.CreatedBy;
                newCallEntry.CreationDate = DateTime.Now;
                newCallEntry.ModifiedBy = NewJob.CreatedBy;
                newCallEntry.ModificationDate = DateTime.Now;
                newCallEntry.Active = true;
                newCallEntry.UserCall = true;

                _callLogRepository.Add(newCallEntry);

                if (saveInitialEmailAdvise)
                    SendCallCriteriaInitialAdvise(newCallEntry.ID);

                SaveCallCriteriaInitialAdviseResources(newCallEntry, saveInitialEmailAdvise);
            }
            catch (Exception ex)
            {
                throw new Exception("There was an error while trying to save a new call entry.", ex);
            }
        }
        public void SaveWhiteLightCallLogResources(CS_CallLog newCallLog, CS_EquipmentWhiteLight equipmentWhiteLight)
        {
            try
            {
                IList<CS_CallLogResource> saveList = new List<CS_CallLogResource>();
                IList<CS_CallLogCallCriteriaEmail> emailSaveList = new List<CS_CallLogCallCriteriaEmail>();

                int? employeeId = null;
                int? contactId = null;

                CS_CallLogResource resource = new CS_CallLogResource()
                {
                    CallLogID = newCallLog.ID,
                    EmployeeID = employeeId,
                    ContactID = contactId,
                    EquipmentID = equipmentWhiteLight.EquipmentID,
                    JobID = newCallLog.JobID,
                    Type = 3,
                    CreatedBy = newCallLog.CreatedBy,
                    CreationDate = DateTime.Now,
                    ModifiedBy = newCallLog.ModifiedBy,
                    ModificationDate = DateTime.Now,
                    Active = true
                };

                resource = _callLogResourceRepository.Add(resource);

                SendNotificationWhiteLight(newCallLog, resource);
            }
            catch (Exception ex)
            {
                throw new Exception("There was an error while trying to save the White Light Resources.", ex);
            }
        }
        public void UpdateInitialAdvise()
        {
            try
            {
                // Verify if one of these fields changed, to generate a new initial advise
                // Customer
                // Division
                // Preset Date
                // State
                // City
                // # Of Engines
                // # Of Loads
                // # of Empties
                // Hazmat
                // Scope of Work
                if (_generatesInitialAdvise)
                {
                    BuildInitialAdviseNote(true);
                    CS_CallLog newCallEntry = new CS_CallLog();
                    newCallEntry.JobID = NewJob.ID;
                    newCallEntry.CallTypeID = (int)Globals.CallEntry.CallType.InitialAdviseUpdate;
                    newCallEntry.PrimaryCallTypeId = (int)Globals.CallEntry.PrimaryCallType.JobUpdateNotification;
                    newCallEntry.CallDate = DateTime.Now;
                    DateTimeOffset dateTimeOffset = DateTimeOffset.Now;
                    newCallEntry.Xml = null;
                    newCallEntry.Note = _initialAdvise.ToString();
                    newCallEntry.CreatedBy = NewJob.ModifiedBy;
                    newCallEntry.CreationDate = NewJob.ModificationDate;
                    newCallEntry.ModifiedBy = NewJob.ModifiedBy;
                    newCallEntry.ModificationDate = NewJob.ModificationDate;
                    newCallEntry.Active = true;
                    newCallEntry.UserCall = true;

                    _callLogRepository.Add(newCallEntry);

                    SendCallCriteriaInitialAdvise(newCallEntry.ID);
                    SaveCallCriteriaInitialAdviseResources(newCallEntry, true);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("There was an error while trying to save a new call entry.", ex);
            }
        }
        public void SendNotificationWhiteLight(CS_CallLog callentry, CS_CallLogResource resource)
        {
            _emailModel = new EmailModel();

            IList<CS_Email> emails = new List<CS_Email>();
            string receipts = string.Empty;

            //List receipts
            IList<EmailVO> receiptsEmail = _callCriteriaModel.ListReceiptsByCallLog(callentry.CallTypeID.ToString(), callentry.JobID, callentry);

            if (receiptsEmail.Count > 0)
            {
                for (int i = 0; i < receiptsEmail.Count; i++)
                    receipts += (i == 0) ? receiptsEmail[i].Email : string.Format(";{0}", receiptsEmail[i].Email);

                //Body
                string body = GenerateEmailBodyForWhiteLight(resource);

                //Subject
                string subject = GenerateEmailSubjectForWhiteLight(callentry, resource);

                emails = _emailModel.SaveEmailList(receipts, subject, body, "System", Globals.Security.SystemEmployeeID);

                _callCriteriaModel.SendCallLogCriteriaEmails(callentry);
            }
        }
Exemple #26
0
        public ActionResult Generate(TicketViewModel ticketViewModel)
        {
            CS_Ticket    ticketObj = new CS_Ticket();
            CS_Log       logObj    = new CS_Log();
            CS_EmailLink linkObj   = new CS_EmailLink();

            ticketObj.CreatedOn   = DateTime.Now;
            ticketObj.EmployeeId  = GetEmployeeId();
            ticketObj.Description = ticketViewModel.Description;
            ticketObj.CustomerId  = ticketViewModel.CustomerId;
            ticketObj.SLAId       = ticketViewModel.IDSLA;
            ticketObj.Title       = ticketViewModel.Title;
            ticketObj.ProjectId   = ticketViewModel.ProjectId;
            ticketObj.StatusId    = 1;
            ticketObj.LastComment = "";
            _objTicket.Insert(ticketObj);

            // To add entry in Log table
            int ticketid = _dbContext.CS_Ticket.Max(item => item.TicketId);

            logObj.TicketId     = ticketid;
            logObj.Title        = ticketViewModel.Title;
            logObj.Comment      = "Ticket Created";
            logObj.CreatedOn    = ticketObj.CreatedOn;
            logObj.EmployeeId   = ticketObj.EmployeeId;
            logObj.CustumerId   = ticketObj.CustomerId;
            logObj.StatusId     = 1;
            logObj.PriorityName = FindPriorityBySLAId(ticketObj.SLAId);

            _objLog.Insert(logObj);
            string ReadUrl = ReadURL();
            bool   result  = (ReadUrl.All(Char.IsDigit) && ReadUrl.Length > 0);

            // Update Ticket generated In calllog table
            if (result == true)
            {
                int callLogid = Convert.ToInt32(ReadUrl);
                //// CS_CallLog callObj = new CS_CallLog();
                //var row = (from u in _dbContext.CS_CallLog
                //           where u.CallLogId == callLogid
                //           select u);

                //foreach (var entity in row)
                //{
                //    callObj = entity;
                //    callObj.IsTicketGenerated = true;
                //}
                CS_CallLog callObj = _objCallLog.FindById(callLogid);

                callObj.IsTicketGenerated = true;
                callObj.TicketId          = ticketObj.TicketId;
                _objCallLog.Update(callObj);
            }

            //Fetch customer email id
            string emailFrom = _dbContext.Customer.Where(e => e.Id == ticketObj.CustomerId).Select(a => a.Email).SingleOrDefault();
            //Fetch status name
            string status = _dbContext.CS_Status.Where(s => s.StatusId == ticketObj.StatusId).Select(a => a.Status).SingleOrDefault();
            //Fetch priority name
            string priority = _dbContext.CS_SLA.Where(p => p.SLAId == ticketObj.SLAId).Select(a => a.PriorityName).SingleOrDefault();
            //Fetch ticket number
            string ticketNumber = _dbContext.CS_Ticket.Where(t => t.TicketId == ticketObj.TicketId).Select(a => a.TicketNumber).SingleOrDefault();
            //Fectch employee email
            string employeeEmail = _dbContext.Employee.Where(e => e.Id == ticketObj.EmployeeId).Select(a => a.Email_Official).SingleOrDefault();

            linkObj.TicketId = ticketObj.TicketId;
            linkObj.Link     = Utility.GenerateLink(linkObj.TicketId);
            _objLink.Insert(linkObj);
            string employeeBody = EmailContent.EmployeeBody(linkObj.Link);

            Thread AcknowledgeCustomer = new Thread(() => SendMail.SendAcknowledgement(emailFrom, EmailContent.CustomerSubject, EmailContent.CustomerBody, ticketNumber, priority, status));
            Thread NotifyEmployee      = new Thread(() => SendMail.SendAcknowledgement(employeeEmail, EmailContent.EmployeeSubject, employeeBody, ticketNumber, priority, status));

            AcknowledgeCustomer.Start();
            NotifyEmployee.Start();

            return(RedirectToAction(ActionName.TicketIndex, ControllerName.Ticket));
        }
        private string GenerateEmailSubjectForWhiteLight(CS_CallLog callLog, CS_CallLogResource resource)
        {
            StringBuilder subject = new StringBuilder();
            int jobID = callLog.JobID;
            CS_Job job = _jobRepository.Get(e => e.ID == jobID, "CS_CustomerInfo", "CS_CustomerInfo.CS_Customer", "CS_JobInfo", "CS_JobInfo.CS_JobAction", "CS_LocationInfo", "CS_LocationInfo.CS_City", "CS_LocationInfo.CS_State");

            subject.Append(job.PrefixedNumber);
            subject.Append(", ");

            if (callLog.CS_Job.ID != (int)Globals.GeneralLog.ID)
            {
                subject.Append(job.CS_CustomerInfo.CS_Customer.Name.Trim());
                subject.Append(", ");
                subject.Append(job.CS_JobInfo.CS_JobAction.Description);
                subject.Append(", ");
                subject.Append(job.CS_LocationInfo.CS_City.Name);
                subject.Append(" ");
                subject.Append(job.CS_LocationInfo.CS_State.Acronym);
            }

            else
            {
                subject.Append(resource.CS_Equipment.CS_Division.Name);
                subject.Append(", ");
                subject.Append(resource.CS_Equipment.CS_Division.CS_State.Name);

            }

            subject.Append(", White Light");

            return subject.ToString();
        }
        /// <summary>
        /// Create the Lapsed Preset Call Entry
        /// </summary>
        /// <param name="job"></param>
        private void SaveFirstAlertCallLog(CS_FirstAlert firstAlert, bool isGeneralLog)
        {
            try
            {
                CS_CallLog newCallEntry = new CS_CallLog();

                if (isGeneralLog)
                    newCallEntry.JobID = Globals.GeneralLog.ID;
                else
                    newCallEntry.JobID = firstAlert.JobID;
                newCallEntry.CallTypeID = (int)Globals.CallEntry.CallType.FirstAlert;
                if (isGeneralLog)
                    newCallEntry.PrimaryCallTypeId = (int)Globals.CallEntry.PrimaryCallType.NonJobUpdateNotification;
                else
                    newCallEntry.PrimaryCallTypeId = (int)Globals.CallEntry.PrimaryCallType.JobUpdateNotification;
                newCallEntry.CallDate = DateTime.Now;
                DateTimeOffset dateTimeOffset = DateTimeOffset.Now;
                newCallEntry.Xml = null;
                newCallEntry.Note = BuildFirstAlertNote(firstAlert);
                newCallEntry.CreatedBy = "System";
                newCallEntry.CreationDate = DateTime.Now;
                newCallEntry.ModifiedBy = "System";
                newCallEntry.ModificationDate = DateTime.Now;
                newCallEntry.Active = true;
                newCallEntry.UserCall = true;

                _callLogRepository.Add(newCallEntry);

                IList<EmailVO> callCriteriaList = SaveCallCriteriaFirstAlertResources(newCallEntry);

                if (!isGeneralLog)
                    SaveFirstAlertContactPersonal(firstAlert, callCriteriaList);
            }
            catch (Exception ex)
            {
                throw new Exception("There was an error while trying to save a new call entry of type First Alert.", ex);
            }
        }
        private string GenerateEmailBodyForReservedResources(CS_CallLog callEntry, List<CS_Reserve> resources)
        {
            StringBuilder body = new StringBuilder();

            body.AppendLine("<div>");

            body.AppendLine("<div style='width: 100%; display: inline-block;'>");
            body.AppendLine("<div style='text-align: right; width: 30%; height: 100%; display: inline-block; float: left'>");
            body.AppendLine("<b>Resources Reserved</b>");
            body.AppendLine("</div><div style='text-align: left; width: 68%; height: 100%; display: inline-block; float: right'></div>");
            body.AppendLine("</div>");

            for (int i = 0; i < resources.Count; i++)
            {
                string division = string.Empty;
                string description = string.Empty;
                string date = string.Empty;
                string time = string.Empty;
                string duration = string.Empty;

                if (resources[i].EmployeeID.HasValue)
                {
                    int reserveID = resources[i].ID;
                    CS_Reserve resource = _reserveRepository.Get(e => e.ID == reserveID, "CS_Employee", "CS_Employee.CS_Division");
                    division = resource.CS_Employee.CS_Division.Name;
                    description = resource.CS_Employee.FullName;
                    date = callEntry.CallDate.ToString("MM/dd/yyyy");
                    time = callEntry.CallDate.ToShortTimeString();
                    duration = resource.Duration.ToString();
                }
                else
                {
                    int reserveID = resources[i].ID;
                    CS_Reserve resource = _reserveRepository.Get(e => e.ID == reserveID && e.Active, "CS_EquipmentType", "CS_Division");
                    division = resource.CS_Division.Name;
                    description = resource.CS_EquipmentType.Name;
                    date = callEntry.CallDate.ToString("MM/dd/yyyy");
                    time = callEntry.CallDate.ToShortTimeString();
                    duration = resource.Duration.ToString();
                }

                //Division
                body.AppendLine("<div style='width: 100%; display: inline-block;'>");
                body.AppendLine("<div style='text-align: right; width: 30%; height: 100%; display: inline-block; float: left'>");
                body.AppendLine("<b>Division: </b>");
                body.AppendLine("</div><div style='text-align: left; width: 68%; height: 100%; display: inline-block; float: right'>");
                body.AppendLine(division);
                body.AppendLine("</div>");
                body.AppendLine("</div>");

                //Description
                body.AppendLine("<div style='width: 100%; display: inline-block;'>");
                body.AppendLine("<div style='text-align: right; width: 30%; height: 100%; display: inline-block; float: left'>");
                body.AppendLine("<b>Description: </b>");
                body.AppendLine("</div><div style='text-align: left; width: 68%; height: 100%; display: inline-block; float: right'>");
                body.AppendLine(description);
                body.AppendLine("</div>");
                body.AppendLine("</div>");

                //Date
                body.AppendLine("<div style='width: 100%; display: inline-block;'>");
                body.AppendLine("<div style='text-align: right; width: 30%; height: 100%; display: inline-block; float: left'>");
                body.AppendLine("<b>Date: </b>");
                body.AppendLine("</div><div style='text-align: left; width: 68%; height: 100%; display: inline-block; float: right'>");
                body.AppendLine(date);
                body.AppendLine("</div>");
                body.AppendLine("</div>");

                //Time
                body.AppendLine("<div style='width: 100%; display: inline-block;'>");
                body.AppendLine("<div style='text-align: right; width: 30%; height: 100%; display: inline-block; float: left'>");
                body.AppendLine("<b>Time: </b>");
                body.AppendLine("</div><div style='text-align: left; width: 68%; height: 100%; display: inline-block; float: right'>");
                body.AppendLine(time);
                body.AppendLine("</div>");
                body.AppendLine("</div>");

                //Duration
                body.AppendLine("<div style='width: 100%; display: inline-block;'>");
                body.AppendLine("<div style='text-align: right; width: 30%; height: 100%; display: inline-block; float: left'>");
                body.AppendLine("<b>Duration: </b>");
                body.AppendLine("</div><div style='text-align: left; width: 68%; height: 100%; display: inline-block; float: right'>");
                body.AppendLine(duration);
                body.AppendLine("</div>");
                body.AppendLine("</div>");
            }

            body.AppendLine("</div>");

            return body.ToString();
        }