public void MustReturnNullStatusIfJobInfoStatusIsNull()
 {
     //Arrange
     CS_JobInfo info = new CS_JobInfo()
     {
     };
     //Act
     CS_JobStatus status = info.LastJobStatus;
     //Assert
     Assert.IsNull(status);
 }
 public void MustReturnLastJobStatusBasedOnDate()
 {
     //Arrange
     CS_JobInfo info = new CS_JobInfo()
     {
         CS_Job_JobStatus = new System.Data.Objects.DataClasses.EntityCollection<CS_Job_JobStatus>()
         {
             new CS_Job_JobStatus()
             {
                 ID = 1, JobID = 1, JobStatusId = (int)Globals.JobRecord.JobStatus.Active, CreationDate = new DateTime(2011,6,14,1,0,0), ModificationDate = new DateTime(2011,6,14,2,0,0),
                 CS_JobStatus = new CS_JobStatus(){ID = (int)Globals.JobRecord.JobStatus.Active}
             },
             new CS_Job_JobStatus()
             {
                 ID=2, JobID = 1, JobStatusId = (int)Globals.JobRecord.JobStatus.Closed, CreationDate = DateTime.Now, ModificationDate = DateTime.Now, Active = true,
                 CS_JobStatus = new CS_JobStatus(){ ID=(int)Globals.JobRecord.JobStatus.Closed}
             }
         }
     };
     //Act
     CS_JobStatus status = info.LastJobStatus;
     //Assert
     Assert.AreEqual<int>((int)Globals.JobRecord.JobStatus.Closed, status.ID);
 }
        public void Initialize()
        {
            // Step 1 - Clear Tables
            JobInfoDao.Singleton.ClearAll();
            ResourceDao.Singleton.ClearAll();
            EmployeeDao.Singleton.ClearAll();

            // Step 2 - Adding controlled data
            country = CountryDao.Singleton.Add(
                new CS_Country()
                {
                    Active = true,
                    Name = "USA",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });

            state = StateDao.Singleton.Add(
                new CS_State()
                {
                    Active = true,
                    Acronym = "TX",
                    Name = "Texas",
                    CountryID = country.ID,
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });

            division = DivisionDao.Singleton.Add(
                new CS_Division()
                {
                    Active = true,
                    CountryID = country.ID,
                    Description = "DIV1",
                    StateID = state.ID,
                    Name = "001",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });

            employee1 = EmployeeDao.Singleton.Add(
                new CS_Employee()
                {
                    Active = true,
                    FirstName = "a",
                    Name = "b",
                    DivisionID = division.ID,
                    BusinessCardTitle = "Laborer",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });
            employee2 = EmployeeDao.Singleton.Add(
                new CS_Employee()
                {
                    Active = true,
                    FirstName = "c",
                    Name = "d",
                    DivisionID = division.ID,
                    BusinessCardTitle = "Regional Vice President",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });

            jobStatus = JobStatusDao.Singleton.Add(
                new CS_JobStatus()
                {
                    Active = true,
                    Description = "Active",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });
            priceType = PriceTypeDao.Singleton.Add(
                new CS_PriceType()
                {
                    Active = true,
                    Acronym = "X",
                    Description = "X",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });
            jobCategory = JobCategoryDao.Singleton.Add(
                new CS_JobCategory()
                {
                    Active = true,
                    Description = "X",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });
            jobType = JobTypeDao.Singleton.Add(
                new CS_JobType()
                {
                    Active = true,
                    Description = "X",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });
            jobAction = JobActionDao.Singleton.Add(
                new CS_JobAction()
                {
                    Active = true,
                    Description = "X",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });

            job = JobDao.Singleton.Add(
                new CS_Job()
                {
                    Active = true,
                    Number = "000001",
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });
            jobInfo = JobInfoDao.Singleton.Add(
                new CS_JobInfo()
                {
                    Active = true,
                    JobID = job.ID,
                    JobStatusID = jobStatus.ID,
                    PriceTypeID = priceType.ID,
                    JobCategoryID = jobCategory.ID,
                    JobTypeID = jobType.ID,
                    JobActionID = jobAction.ID,
                    InitialCallDate = DateTime.Now,
                    InitialCallTime = new TimeSpan(0, 1, 10, 0, 0),
                    InterimBill = false,
                    ProjectManager = employee2.ID,
                    EmployeeID = employee2.ID,
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });

            resource = ResourceDao.Singleton.Add(
                new CS_Resource()
                {
                    Active = true,
                    EmployeeID = employee1.ID,
                    JobID = job.ID,
                    CreatedBy = "Load",
                    CreationDate = DateTime.Now,
                    ModifiedBy = "Load",
                    ModificationDate = DateTime.Now
                });
        }
        public void SaveJobData()
        {
            if ((_view.InitialCallDate.Date + _view.InitialCallTime) > DateTime.Now)
            {
                _view.DisplayMessage("Initial Call Date can not be greater than today.", false);
                _view.SavedSuccessfuly = false;
                return;
            }

            // CS_Job
            CS_Job csJob = new CS_Job();

            csJob.CreatedBy = _view.Username;
            csJob.CreationDate = DateTime.Now;
            csJob.ModifiedBy = _view.Username;
            csJob.ModificationDate = DateTime.Now;
            csJob.Active = true;
            csJob.EmergencyResponse = _view.IsEmergencyResponse;

            _jobModel.NewJob = csJob;

            // Validations for Hulcher Contact and Division
            //int? calledInByContactId = null;
            //if (_view.PrimaryContactId != null && _view.HulcherContactId != null)
            //{
            //    //calledInByContactId = _view.PrimaryContactId;
            //    _view.PrimaryContactId = null;
            //}
            int? hulcherDivision = null;
            if (_view.HulcherContactId.HasValue)
                hulcherDivision = _view.PrimaryDivisionId;

            // CS_CustomerInfo
            CS_CustomerInfo customerInfo = new CS_CustomerInfo()
            {
                Active = true,
                InitialCustomerContactId = _view.PrimaryContactId,
                CustomerId = _view.CustomerId,
                PocEmployeeId = _view.HulcherContactId,
                DivisionId = hulcherDivision,
                CreatedBy = _view.Username,
                CreationDate = DateTime.Now,
                ModifiedBy = _view.Username,
                ModificationDate = DateTime.Now
            };
            _jobModel.NewCustomer = customerInfo;

            // CS_JobDivision
            IList<CS_JobDivision> jobDivisionList = new List<CS_JobDivision>();
            jobDivisionList.Add(new CS_JobDivision()
            {
                Active = true,
                CreatedBy = _view.Username,
                CreationDate = DateTime.Now,
                DivisionID = _view.PrimaryDivisionId,
                IsFromCustomerInfo = hulcherDivision.HasValue,
                ModificationDate = DateTime.Now,
                ModifiedBy = _view.Username,
                PrimaryDivision = true
            });
            _jobModel.NewJobDivision = jobDivisionList;

            // CS_JobInfo
            CS_JobCategory jobCategory = _jobModel.GetJobCategoryByJobAction(_view.JobActionId);
            CS_JobType jobType = _jobModel.GetJobTypeByJobAction(_view.JobActionId);
            DateTime? startDate = null;
            DateTime? closedDate = null;
            if (_view.JobStatusId.Equals((int)Globals.JobRecord.JobStatus.Active))
                startDate = DateTime.Now;
            else if (_view.JobStatusId.Equals((int)Globals.JobRecord.JobStatus.Closed))
                closedDate = DateTime.Now;

            CS_JobInfo jobInfo = new CS_JobInfo()
            {
                Active = true,
                InitialCallDate = _view.InitialCallDate,
                InitialCallTime = _view.InitialCallTime,
                //JobStatusID = _view.JobStatusId,
                PriceTypeID = _view.PriceTypeId,
                JobActionID = _view.JobActionId,
                CreatedBy = _view.Username,
                CreationDate = DateTime.Now,
                ModifiedBy = _view.Username,
                ModificationDate = DateTime.Now,
                JobCategoryID = jobCategory.ID,
                JobTypeID = jobType.ID,
            };
            _jobModel.NewJobInfo = jobInfo;

            CS_Job_JobStatus jobStatus = new CS_Job_JobStatus()
            {
                Active = true,
                CreatedBy = _view.Username,
                CreationDate = DateTime.Now,
                ModifiedBy = _view.Username,
                ModificationDate = DateTime.Now,
                JobStatusId = _view.JobStatusId,
                JobStartDate = startDate,
                JobCloseDate = closedDate
            };

            _jobModel.NewJobStatusHistory = jobStatus;
            _jobModel.JobStatusID = _view.JobStatusId;

            if (_view.JobStatusId == (int)Globals.JobRecord.JobStatus.Active)
                _jobModel.NewJob.BillingStatus = (int)Globals.JobRecord.BillingStatus.Working;
            else if (_view.JobStatusId == (int)Globals.JobRecord.JobStatus.Closed || _view.JobStatusId == (int)Globals.JobRecord.JobStatus.Cancelled || _view.JobStatusId == (int)Globals.JobRecord.JobStatus.Lost)
                _jobModel.NewJob.BillingStatus = (int)Globals.JobRecord.BillingStatus.Done;
            else if (_view.JobStatusId == (int)Globals.JobRecord.JobStatus.Potential || _view.JobStatusId == (int)Globals.JobRecord.JobStatus.Preset || _view.JobStatusId == (int)Globals.JobRecord.JobStatus.PresetPurchase)
                _jobModel.NewJob.BillingStatus = (int)Globals.JobRecord.BillingStatus.Created;

            // CS_LocationInfo
            int countryId = _locationModel.GetCountryByStateId(_view.StateId);
            CS_LocationInfo locationInfo = new CS_LocationInfo()
            {
                Active = true,
                CountryID = countryId,
                StateID = _view.StateId,
                CityID = _view.CityId,
                ZipCodeId = _view.ZipCode,
                CreatedBy = _view.Username,
                CreationDate = DateTime.Now,
                ModifiedBy = _view.Username,
                ModificationDate = DateTime.Now
            };
            _jobModel.NewLocationInfo = locationInfo;

            // CS_ScopeOfWork
            IList<CS_ScopeOfWork> lstScopeOfWork = new List<CS_ScopeOfWork>();
            lstScopeOfWork.Add(new CS_ScopeOfWork()
            {
                Active = true,
                ScopeOfWork = _view.ScopeOfWork,
                CreatedBy = _view.Username,
                CreationDate = DateTime.Now,
                ModifiedBy = _view.Username,
                ModificationDate = DateTime.Now
            });
            _jobModel.NewScopeOfWork = lstScopeOfWork;

            // CS_JobDescription
            CS_JobDescription jobDescription = new CS_JobDescription()
            {
                Active = true,
                CreatedBy = _view.Username,
                CreationDate = DateTime.Now,
                ModifiedBy = _view.Username,
                ModificationDate = DateTime.Now
            };
            _jobModel.NewJobDescription = jobDescription;
            _jobModel.SaveJobData(false, null, true);
            _view.JobId = _jobModel.NewJob.ID;

            _view.SavedSuccessfuly = true;
        }
        public void TestIfSubjectIsCorrect()
        {
            // Arrange
            CS_JobInfo jobInfo = new CS_JobInfo()
            {
                JobID = 2,
                CS_Job_JobStatus = new EntityCollection<CS_Job_JobStatus>() { new CS_Job_JobStatus() { ID = 1, JobID = 2, JobStatusId = 1, Active = true } },
                CS_PriceType = new CS_PriceType() { ID = 1, Acronym = "P", Active = true },
                CS_JobType = new CS_JobType() { ID = 1, Description = "C", Active = true },
                CS_JobAction = new CS_JobAction() { ID = 1, Description = "Action", Active = true }
            };
            CS_Job job = new CS_Job()
            {
                ID = 2, Number = "000001", Active = true,
                CS_JobInfo = jobInfo
            };
            CS_CustomerInfo customerInfo = new CS_CustomerInfo()
            {
                JobId = 2,
                CS_Customer = new CS_Customer() { ID = 1, Name = "Customer Name", Active = true }
            };
            CS_LocationInfo locationInfo = new CS_LocationInfo()
            {
                JobID = 2,
                CS_City = new CS_City() { ID = 1, Name = "City", Active = true },
                CS_State = new CS_State() { ID = 1, Acronym = "ST", Active = true }
            };
            string callType = "Call Type Description";

            // Act
            CallCriteriaModel model = new CallCriteriaModel();
            string result = model.GenerateSubjectForCallCriteria(job, jobInfo, customerInfo, locationInfo, callType);

            // Assert
            string expectedResult = "PC000001, Customer Name, Action, City ST, Call Type Description";
            Assert.AreEqual(expectedResult, result);
        }
        /// <summary>
        /// Generates the Subject for the email that needs to be sent by the Call Criteria Process
        /// </summary>
        /// <param name="job">Job Details</param>
        /// <param name="jobInfo">Job Info Details</param>
        /// <param name="customerInfo">Customer Info Details</param>
        /// <param name="locationInfo">Location Info Details</param>
        /// <param name="callType">Call Type</param>
        /// <returns>Email Subject</returns>
        public string GenerateSubjectForCallCriteria(CS_Job job, CS_JobInfo jobInfo, CS_CustomerInfo customerInfo, CS_LocationInfo locationInfo, string callType)
        {
            string subject = string.Empty;

            if (job.ID == Globals.GeneralLog.ID)
                subject = string.Format("{0} - General Log - {1}", job.Number, callType);
            else
            {
                if (null != job)
                    subject = string.Format("{0}, {1}, {2}, {3} {4}, {5}",
                        job.PrefixedNumber,
                        customerInfo.CS_Customer.Name.Trim(),
                        jobInfo.CS_JobAction.Description,
                        locationInfo.CS_City.Name,
                        locationInfo.CS_State.Acronym,
                        callType);
            }

            return subject;
        }