示例#1
0
        public void OrganizationDepartment_Extension_AsDTO_Null()
        {
            // Arrange
            OrganizationDepartment organizationDepartment = null;

            // Act
            var result = organizationDepartment.AsDto();

            // Assert
            Assert.IsNull(result);
            Assert.AreEqual(null, result);
        }
示例#2
0
        public void OrganizationDepartment_Property_Name()
        {
            // Arrange
            var organizationDepartment = new OrganizationDepartment();
            var value = "Test Department";

            // Act
            organizationDepartment.Name = value;

            // Assert
            Assert.IsNotNull(organizationDepartment.Name);
            Assert.IsInstanceOfType(organizationDepartment.Name, typeof(string));
            Assert.AreEqual(value, organizationDepartment.Name);
        }
示例#3
0
        public void OrganizationDepartment_Property_Employees()
        {
            // Arrange
            var organizationDepartment = new OrganizationDepartment();
            var value = TestHelper.Employees();

            // Act
            organizationDepartment.Employees = value;

            // Assert
            Assert.IsNotNull(organizationDepartment.Employees);
            Assert.IsInstanceOfType(organizationDepartment.Employees, typeof(List <Employee>));
            Assert.AreEqual(value, organizationDepartment.Employees);
        }
示例#4
0
        public void OrganizationDepartment_Property_Address()
        {
            // Arrange
            var organizationDepartment = new OrganizationDepartment();
            var value = Core.Tests.TestHelper.Address();

            // Act
            organizationDepartment.Address = value;

            // Assert
            Assert.IsNotNull(organizationDepartment.Address);
            Assert.IsInstanceOfType(organizationDepartment.Address, typeof(Address));
            Assert.AreEqual(value, organizationDepartment.Address);
        }
示例#5
0
        public void OrganizationDepartment_Property_IsDeleted()
        {
            // Arrange
            var organizationDepartment = new OrganizationDepartment();
            var value = false;

            // Act
            organizationDepartment.IsDeleted = value;

            // Assert
            Assert.IsNotNull(organizationDepartment.IsDeleted);
            Assert.IsInstanceOfType(organizationDepartment.IsDeleted, typeof(bool));
            Assert.AreEqual(value, organizationDepartment.IsDeleted);
        }
示例#6
0
        public void OrganizationDepartment_Property_Branch()
        {
            // Arrange
            var organizationDepartment = new OrganizationDepartment();
            var value = TestHelper.OrganizationBranch();

            // Act
            organizationDepartment.Branch = value;

            // Assert
            Assert.IsNotNull(organizationDepartment.Branch);
            Assert.IsInstanceOfType(organizationDepartment.Branch, typeof(OrganizationBranch));
            Assert.AreEqual(value, organizationDepartment.Branch);
        }
示例#7
0
        public void OrganizationDepartment_Property_IsActive()
        {
            // Arrange
            var organizationDepartment = new OrganizationDepartment();
            var value = true;

            // Act
            organizationDepartment.IsActive = value;

            // Assert
            Assert.IsNotNull(organizationDepartment.IsActive);
            Assert.IsInstanceOfType(organizationDepartment.IsActive, typeof(bool));
            Assert.AreEqual(value, organizationDepartment.IsActive);
        }
示例#8
0
        public void OrganizationDepartment_Property_ModifiedBy()
        {
            // Arrange
            var organizationDepartment = new OrganizationDepartment();
            var value = Core.Tests.TestHelper.User();

            // Act
            organizationDepartment.ModifiedBy = value;

            // Assert
            Assert.IsNotNull(organizationDepartment.ModifiedBy);
            Assert.IsInstanceOfType(organizationDepartment.ModifiedBy, typeof(User));
            Assert.AreEqual(value, organizationDepartment.ModifiedBy);
        }
示例#9
0
        public void OrganizationDepartment_Property_Modified()
        {
            // Arrange
            var organizationDepartment = new OrganizationDepartment();
            var value = DateTime.Now;

            // Act
            organizationDepartment.Modified = value;

            // Assert
            Assert.IsNotNull(organizationDepartment.Modified);
            Assert.IsInstanceOfType(organizationDepartment.Modified, typeof(DateTime));
            Assert.AreEqual(value, organizationDepartment.Modified);
        }
示例#10
0
文件: AssayService.cs 项目: wpmyj/LC
        public Assay UpdAssayAndStepWithUnitOfWork(Assay oldAssay, OrganizationDepartment org, PlanTaskBatchStepStatus twoStep)
        {
            Assay    reAssay = null;
            DateTime dt      = _sPGetSysDateTimeService.GetSysDateTime();

            try
            {
                decimal unitprice = 0;
                int     grainGrade;
                grainGrade = JudgeGrainGrade(oldAssay.AssayBills.ToList()[0].AssayResults.ToList(), org, oldAssay.Sample.goods_kind, out unitprice);
                if (grainGrade > 0)
                {
                    oldAssay.grain_grade = grainGrade;
                }

                oldAssay.confirm_time = dt;
                _unitOfWork.AddAction(oldAssay, DataActions.Update);

                if (oldAssay.Sample.Enrolment1.Contract != null && oldAssay.Sample.Enrolment1.Contract.grain_price.HasValue)
                {
                    oldAssay.Sample.PlanTaskBatch.unit_price          = oldAssay.Sample.Enrolment1.Contract.grain_price.Value / 1000;
                    oldAssay.Sample.PlanTaskBatch.PlanTask.unit_price = oldAssay.Sample.Enrolment1.Contract.grain_price.Value / 1000;

                    _unitOfWork.AddAction(oldAssay.Sample.PlanTaskBatch, DataActions.Update);

                    _unitOfWork.AddAction(oldAssay.Sample.PlanTaskBatch.PlanTask, DataActions.Update);
                }
                else if (unitprice != 0)
                {
                    oldAssay.Sample.PlanTaskBatch.unit_price          = unitprice;
                    oldAssay.Sample.PlanTaskBatch.PlanTask.unit_price = unitprice;
                    _unitOfWork.AddAction(oldAssay.Sample.PlanTaskBatch, DataActions.Update);

                    _unitOfWork.AddAction(oldAssay.Sample.PlanTaskBatch.PlanTask, DataActions.Update);
                }
                //Step
                twoStep.operate_time = dt;
                _unitOfWork.AddAction(twoStep, DataActions.Add);
            }
            catch (RepositoryException ex)
            {
                throw ex;
            }
            return(reAssay);
        }
        public static OrganizationDepartmentDto AsDto(this OrganizationDepartment organizationDepartment)
        {
            if (organizationDepartment == null)
            {
                return(null);
            }

            return(new OrganizationDepartmentDto
            {
                Id = organizationDepartment.ID,
                Name = organizationDepartment.Name,
                Organization = organizationDepartment.Organization.AsDto(),
                Branch = organizationDepartment.Branch.AsDto(),
                Employees = organizationDepartment.Employees.AsDto(),
                Address = organizationDepartment.Address.AsDto(),
                Created = organizationDepartment.Created,
                CreatedBy = organizationDepartment.CreatedBy.AsDto(),
                Modified = organizationDepartment.Modified,
                ModifiedBy = organizationDepartment.ModifiedBy.AsDto(),
                IsActive = organizationDepartment.IsActive,
                IsDeleted = organizationDepartment.IsDeleted
            });
        }
示例#12
0
        public async Task <string> GetClosedIncidenceNotificationExternalMail(EventResource incidenceData, NotificationSettings settings, OrganizationDepartment departmentData, Organization organizationData)
        {
            var msg = "Dear " + incidenceData?.ReporterName + ", <br/><br/>The incidence with the details below has been closed<br/><br/>Incidence Description: " + incidenceData?.Description + "<br/>Assigned Department: " + departmentData?.Name + "<br/>Assigned Orgainization: " + organizationData?.CompanyName + "<br/><br/>IRS Automated Reports";

            return(msg);
        }
示例#13
0
文件: AssayService.cs 项目: wpmyj/LC
        /// <summary>
        ///
        /// </summary>
        /// <param name="arList">检测值列表</param>
        /// <param name="org">组织机构</param>
        /// <param name="goodsKindID">粮食品种</param>
        /// <param name="cont">合同</param>
        /// <returns>返回等级,-2表示异常,-1表示无等级基础数据,0表示未获取到组织机构对应的等级判定</returns>
        public int JudgeGrainGrade(IList <AssayResult> arList, OrganizationDepartment org, int goodsKindID, out decimal unitPrice)
        {
            int graidGrade = 0;

            unitPrice = 0;
            IList <AssayBasicData> GrainGradeList = GetGrainGrade().ToList();

            if (GrainGradeList == null || GrainGradeList.Count == 0)
            {
                return(-1);
            }
            try
            {
                List <TargetPrice> TargetPriceList;
                if (org.TargetPrices.Count == 0)
                {
                    //未关联组织机构,直接找关联粮食品种的TargetPrice
                    TargetPriceList = _targetPriceService.GetTargetPricesByGoodsKindID(goodsKindID).OrderByDescending(tp => decimal.Parse(tp.min_value)).ToList();
                }
                else
                {
                    TargetPriceList = org.TargetPrices.Where(
                        tp => tp.grain_kind == goodsKindID).OrderByDescending(
                        otp => decimal.Parse(otp.min_value)).ToList();
                }
                if (TargetPriceList == null || TargetPriceList.Count == 0)
                {
                    return(0);                               //如果没有对应的等级判定,就立即返回0
                }
                //选取默认第一个TargetPrice的grain_quality_index为检索项
                AssayResult newar = arList.SingleOrDefault(ar => ar.grain_quality_index == TargetPriceList[0].grain_quality_index.Value);
                if (newar == null)
                {
                    return(0);
                }
                //判断
                string grain_grade = "";
                #region //////////////////////////////////////////判定等级////////////////////////////////////
                for (int i = 0; i < TargetPriceList.Count; i++)
                {
                    int Result = -1;
                    if (!TargetPriceList[i].min_tag.HasValue)
                    {
                        continue;
                    }
                    switch (TargetPriceList[i].min_tag.Value)
                    {
                    case 0:
                        if (decimal.Parse(newar.assay_result_value) > decimal.Parse(TargetPriceList[i].min_value))
                        {
                            Result    = 0;
                            unitPrice = TargetPriceList[i].price.Value;
                        }
                        break;

                    case 1:
                        if (decimal.Parse(newar.assay_result_value) >= decimal.Parse(TargetPriceList[i].min_value))
                        {
                            Result    = 0;
                            unitPrice = TargetPriceList[i].price.Value;
                        }
                        break;

                    case 2:
                        if (decimal.Parse(newar.assay_result_value) < decimal.Parse(TargetPriceList[i].min_value))
                        {
                            Result    = 0;
                            unitPrice = TargetPriceList[i].price.Value;
                        }
                        break;

                    case 3:
                        if (decimal.Parse(newar.assay_result_value) <= decimal.Parse(TargetPriceList[i].min_value))
                        {
                            Result    = 0;
                            unitPrice = TargetPriceList[i].price.Value;
                        }
                        break;

                    default: Result = -1; break;
                    }
                    if (Result != -1)                                                               //满足条件“一等”
                    {
                        switch (i)
                        {
                        case 0:
                            grain_grade = Enum.GetName(typeof(GrainGrade), GrainGrade.一等);
                            break;

                        case 1:
                            grain_grade = Enum.GetName(typeof(GrainGrade), GrainGrade.二等);;
                            break;

                        case 2:
                            grain_grade = Enum.GetName(typeof(GrainGrade), GrainGrade.等);
                            break;

                        case 3:
                            grain_grade = Enum.GetName(typeof(GrainGrade), GrainGrade.四等);
                            break;

                        case 4:
                            grain_grade = Enum.GetName(typeof(GrainGrade), GrainGrade.五等);
                            break;

                        case 5:
                            grain_grade = Enum.GetName(typeof(GrainGrade), GrainGrade.等外);
                            break;

                        default: grain_grade = string.Empty; break;
                        }
                        break;      //  赋值以后可退出循环
                    }
                }
                AssayBasicData abd = GrainGradeList.Single(gg => gg.name == grain_grade);
                if (abd != null)
                {
                    graidGrade = abd.basic_data_id;
                }
                #endregion
                return(graidGrade);
            }
            catch
            {
                //返回-2是异常
                return(-2);
            }
        }
示例#14
0
文件: AssayService.cs 项目: wpmyj/LC
        public Assay AddAssayWithUnitOfWork(Sample newSample, SampleDetail newSampleDetail, int user_id, Contract cont,
                                            IList <GrainQualityIndex> GrainQualityIndexList, List <string> resultList,
                                            AssayStatus status, string AssayBillIndex, OrganizationDepartment org, int gradeID)
        {
            Assay newAssay = new Assay();
            int   billID   = _sysBillNoService.GetBillNoID("QUM", "ASN");

            newAssay.assay_number = _sysBillNoService.GetBillNo(billID);
            //newAssay.assay_result = null;
            //newAssay.bill_owner_org = 1;
            //newAssay.confirm_time = null;
            newAssay.confirm_user  = user_id;
            newAssay.create_time   = _sPGetSysDateTimeService.GetSysDateTime();
            newAssay.grain_grade   = gradeID;
            newAssay.remark        = "";
            newAssay.sample_number = newSample.sample_number;
            newAssay.status        = (int)status;
            _unitOfWork.AddAction(newAssay, DataActions.Add);

            AddAssayBillWithUnitOfWork(newAssay, user_id, newSampleDetail, cont, GrainQualityIndexList, resultList, AssayBillIndex);
            //newAssay.grain_grade = JudgeGrainGrade(newAssay.AssayBills.First().AssayResults,
            return(newAssay);
        }
示例#15
0
        public async Task <IActionResult> CreateIncidenceRemote([FromForm] SaveIncidenceResource incidenceResource)
        {
            try
            {
                var loggedInUserId = _userRepo.GetLoggedInUserId();
                var user           = await _userRepo.GetUser(loggedInUserId);

                bool triggerNotification     = false;
                bool triggerDeptNotification = false;
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                //business rule validation
                var incidenceCode = !string.IsNullOrEmpty(incidenceResource.Description) ? incidenceResource.Description + "/"
                                    + ((incidenceResource.ReportedIncidenceLatitude != null) ? incidenceResource.ReportedIncidenceLatitude : DateTime.Now.Minute) + "/"
                                    + ((incidenceResource.ReportedIncidenceLongitude != null) ? incidenceResource.ReportedIncidenceLongitude : DateTime.Now.Minute)
                    : incidenceResource.ReportedIncidenceLatitude + "/" + incidenceResource.ReportedIncidenceLongitude;
                if (repository.CheckIncidenceCode(incidenceCode))
                {
                    ModelState.AddModelError("Error", "The incidence with this Code already exists.");
                    return(BadRequest(ModelState));
                }

                var incidence = mapper.Map <SaveIncidenceResource, Incidence>(incidenceResource);
                incidence.Deleted         = false;
                incidence.CreatedByUserId = loggedInUserId;
                // incidence.Protected = true; in other to allow pseudo-deletion which only hides the record
                incidence.DateCreated       = DateTime.UtcNow;
                incidence.IncidenceStatusId = GlobalFields.NewIncidenceStatus;
                incidence.Code = incidenceCode;
                //incidence.LastUpdate = DateTime.Now;

                if (user != null)
                {
                    var reporterFullName = string.IsNullOrEmpty(user.MiddleName) ? user.FirstName + " " + user.LastName
                        : user.FirstName + " " + user.MiddleName + " " + user.LastName;
                    incidence.ReporterName         = reporterFullName ?? "";
                    incidence.ReporterDepartmentId = user.DepartmentId;
                    incidence.ReporterEmail        = user.Email1;
                }

                // trigger alert when incidence status is open or re-opened provided as Assignee and Assigner were sent
                if (incidenceResource.AssigneeId != null && (incidenceResource.IncidenceStatusId == GlobalFields.OpenIncidenceStatus || incidenceResource.IncidenceStatusId == GlobalFields.ReOpenedIncidenceStatus))
                {
                    incidence.AssignerId = loggedInUserId;
                    triggerNotification  = true;
                }

                var incidenceTypeDepartment = new OrganizationDepartment();
                if (incidenceResource.IncidenceTypeId != null)
                {
                    incidenceTypeDepartment = await _incidenceTypeDeptRepo.GetDepartmentFromIncidenceType(incidenceResource.IncidenceTypeId);
                }

                incidence.AssignedDepartmentId   = incidenceTypeDepartment.Id;
                incidence.OrganizationId         = incidenceTypeDepartment.OrganizationId;
                incidence.AssignedOrganizationId = incidenceTypeDepartment.OrganizationId;

                incidence.IncidenceStatusId = incidenceResource.IncidenceStatusId ?? GlobalFields.NewIncidenceStatus;
                if (incidence.IncidenceStatusId == GlobalFields.NewIncidenceStatus && incidenceResource.IncidenceTypeId != null)
                {
                    incidence.AssignedDepartmentId   = incidenceTypeDepartment.Id;
                    incidence.OrganizationId         = incidenceTypeDepartment.OrganizationId;
                    incidence.AssignedOrganizationId = incidenceTypeDepartment.OrganizationId;
                    triggerDeptNotification          = true;
                }

                repository.Add(incidence);
                await unitOfWork.CompleteAsync();

                incidence = await repository.GetIncidence(incidence.Id);

                if (incidence == null)
                {
                    return(NotFound());
                }

                if (incidenceResource.file != null && incidenceResource.file.Length != 0)
                {
                    var deptSettings = await _settingsRepo.GetDepartmentSettings(incidenceTypeDepartment.Id);

                    var orgSettings = await _settingsRepo.GetOrganizationSettings(incidenceTypeDepartment.OrganizationId);

                    var generalSettings = await _settingsRepo.GetGeneralSettings();

                    if (!_settingsRepo.ValidateFileType(deptSettings, orgSettings, generalSettings, incidenceResource.file))
                    {
                        return(BadRequest("Invalid file type"));
                    }

                    if (!_settingsRepo.ValidateFileSize(deptSettings, orgSettings, generalSettings, incidenceResource.file))
                    {
                        return(BadRequest("Maximun file size exceeded"));
                    }

                    var isFilePhotoNotVideo = _settingsRepo.IsImageFileNotVideo(deptSettings, orgSettings, generalSettings, incidenceResource.file);

                    //Dont use webrootpath i.e wwwroot as it gets cleared after angular ng build
                    var uploadsFolderPath = Path.Combine(_host.WebRootPath, "uploads");
                    var photo             = await _photoService.UploadPhoto(incidence, incidenceResource.file, uploadsFolderPath, FileUploadChannels.incidencesReportedOnMobile, isFilePhotoNotVideo);

                    // return Ok(mapper.Map<Media, MediaResource>(photo));
                }

                //Next, fetch notification settings from the IncidenceType's-mapped department or the mapped department's organization if dept settings is empty. Dept receives notification here
                //IncidenceType's mapped department's settings is used for sending notification, otherwise if empty, use organization or system settings
                //await _notificationRepo.SendIncidenceNotification(incidenceResource, incidenceTypeDepartment.Id, null, null, incidenceTypeDepartment.OrganizationId);

                if (triggerDeptNotification)
                {
                    //pass the reporter details into incidenceResource as it only exists in incidence and it is needed in email notification
                    incidenceResource.ReporterName  = incidence.ReporterName;
                    incidenceResource.ReporterEmail = incidence.ReporterEmail;
                    incidence.ReporterDepartmentId  = incidence.ReporterDepartmentId;
                    await _notificationRepo.SendEmailNotificationToOrgDeptUsers(incidenceResource, incidenceTypeDepartment.Id, incidenceTypeDepartment.OrganizationId, incidence.ReporterDepartmentId); // use SendEmailNotificationToOrgDeptUsers method in notificationRepo
                }

                if (triggerNotification)
                {
                    await _notificationRepo.SendIncidenceNotification(incidenceResource, incidenceResource.AssignedDepartmentId, incidenceResource.AssignerId, incidenceResource.AssigneeId, incidenceResource.AssignedOrganizationId);
                }

                incidence = await repository.GetIncidence(incidence.Id);

                var result = mapper.Map <Incidence, IncidenceResource>(incidence);

                return(Ok(result));
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("Error", "An error occured while performing this operation.");
                return(BadRequest(ModelState));
            }

            //var result = mapper.Map<Incidence, IncidenceResource>(incidence);

            //return Ok(result);
        }
示例#16
0
        public async Task <string> GetNewHazardNotificationMail(EventResource incidenceData, NotificationSettings settings, OrganizationDepartment ReporterDeptData)
        {
            var msg = "Dear " + settings?.EntityName + " Member" + ", <br/><br/>A new hazard with the details below has been created<br/><br/>Hazard Description: " + incidenceData?.Description + "<br/>Reporter's Name: " + incidenceData?.ReporterName + " " + "<br/>Reporter's Email: " + incidenceData?.ReporterEmail + " " + "<br/>Reporter's Department: " + ReporterDeptData?.Name + " <br/><br/>IRS Automated Reports";

            return(msg);
        }
示例#17
0
        public void OrganizationDepartment_Property_Count()
        {
            var organizationDepartment = new OrganizationDepartment();

            Assert.AreEqual(12, organizationDepartment.GetType().GetProperties().Count());
        }
示例#18
0
        public async Task <string> GetUnderReviewIncidenceNotificationMail(User assigneeUserData, User assignerUserData, EventResource incidenceData, NotificationSettings settings, OrganizationDepartment departmentData, Organization organizationData)
        {
            var msg = "Dear " + assigneeUserData?.FirstName + ", <br/><br/>The incidence with the details below is under review<br/><br/>Incidence Description: " + incidenceData?.Description + "<br/>Assigned Department: " + departmentData?.Name + "<br/>Assigned Organization: " + organizationData?.CompanyName + "<br/>Assigner: " + assignerUserData?.FirstName + " " + assignerUserData?.LastName + " (" + assignerUserData?.JobTitle + ") <br/>Assignee: " + assigneeUserData?.FirstName + " " + assigneeUserData?.LastName + " (" + assigneeUserData?.JobTitle + ") <br/><br/>IRS Automated Reports";

            return(msg);
        }
示例#19
0
        public async Task <IActionResult> CreateIncidence([FromBody] SaveIncidenceResource incidenceResource)
        {
            try
            {
                var loggedInUserId = _userRepo.GetLoggedInUserId();
                var user           = await _userRepo.GetUser(loggedInUserId);

                bool triggerNotification     = false;
                bool triggerDeptNotification = false;
                //assumes the organization creates this incidence front front-end, notification applies only when its assigned, resolved or closed
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                //business rule validation
                var incidenceCode = !string.IsNullOrEmpty(incidenceResource.Description) ? incidenceResource.Description + "/"
                                    + ((incidenceResource.ReportedIncidenceLatitude != null) ? incidenceResource.ReportedIncidenceLatitude : DateTime.Now.Minute) + "/"
                                    + ((incidenceResource.ReportedIncidenceLongitude != null) ? incidenceResource.ReportedIncidenceLongitude : DateTime.Now.Minute)
                    : incidenceResource.ReportedIncidenceLatitude + "/" + incidenceResource.ReportedIncidenceLongitude;
                if (repository.CheckIncidenceCode(incidenceCode))
                {
                    ModelState.AddModelError("Error", "The incidence with this Code already exists.");
                    return(BadRequest(ModelState));
                }

                var incidence = mapper.Map <SaveIncidenceResource, Incidence>(incidenceResource);
                incidence.Deleted = false;
                // incidence.Protected = true; in other to allow pseudo-deletion which only hides the record
                incidence.CreatedByUserId   = _userRepo.GetLoggedInUserId();
                incidence.DateCreated       = DateTime.Now;
                incidence.IncidenceStatusId = incidenceResource.IncidenceStatusId ?? GlobalFields.NewIncidenceStatus;
                incidence.Code = incidenceCode;
                //incidence.LastUpdate = DateTime.Now;

                if (user != null)
                {
                    var reporterFullName = string.IsNullOrEmpty(user.MiddleName) ? user.FirstName + " " + user.LastName
                        : user.FirstName + " " + user.MiddleName + " " + user.LastName;
                    incidence.ReporterName         = reporterFullName ?? "";
                    incidence.ReporterDepartmentId = user.DepartmentId;
                    incidence.ReporterEmail        = user.Email1;
                }
                incidence.OrganizationId = user.UserName != "Admin" ? user.OrganizationId : null;
                // trigger alert when incidence status is open or re-opened provided as Assignee and Assigner were sent
                if (incidenceResource.AssigneeId != null && (incidenceResource.IncidenceStatusId == GlobalFields.OpenIncidenceStatus || incidenceResource.IncidenceStatusId == GlobalFields.ReOpenedIncidenceStatus))
                {
                    incidence.AssignerId = loggedInUserId;
                    triggerNotification  = true;
                }
                else if (incidenceResource.IncidenceStatusId != incidence.IncidenceStatusId && incidenceResource.IncidenceStatusId == GlobalFields.ClosedIncidenceStatus)
                {
                    // set resolution date when incidence is closed. No notification here as it incidence was already closed before creation. No Assigner or Assignee before now
                    incidenceResource.ResolutionDate = DateTime.Now;
                }

                var incidenceTypeDepartment = new OrganizationDepartment();
                if (incidenceResource.IncidenceTypeId != null)
                {
                    incidenceTypeDepartment = await _incidenceTypeDeptRepo.GetDepartmentFromIncidenceType(incidenceResource.IncidenceTypeId);
                }
                incidence.IncidenceStatusId = incidenceResource.IncidenceStatusId ?? GlobalFields.NewIncidenceStatus;
                if (incidence.IncidenceStatusId == GlobalFields.NewIncidenceStatus && incidenceResource.IncidenceTypeId != null)
                {
                    incidence.AssignedDepartmentId   = incidenceTypeDepartment.Id;
                    incidence.OrganizationId         = incidenceTypeDepartment.OrganizationId;
                    incidence.AssignedOrganizationId = incidenceTypeDepartment.OrganizationId;
                    triggerDeptNotification          = true;
                }

                repository.Add(incidence);
                await unitOfWork.CompleteAsync();

                if (triggerDeptNotification)
                {
                    //pass the reporter details into incidenceResource as it only exists in incidence and it is needed in email notification
                    incidenceResource.ReporterName  = incidence.ReporterName;
                    incidenceResource.ReporterEmail = incidence.ReporterEmail;
                    incidence.ReporterDepartmentId  = incidence.ReporterDepartmentId;
                    await _notificationRepo.SendEmailNotificationToOrgDeptUsers(incidenceResource, incidenceTypeDepartment.Id, incidenceTypeDepartment.OrganizationId, incidence.ReporterDepartmentId); // use SendEmailNotificationToOrgDeptUsers method in notificationRepo
                }

                if (triggerNotification)
                {
                    await _notificationRepo.SendIncidenceNotification(incidenceResource, incidenceResource.AssignedDepartmentId, incidenceResource.AssignerId, incidenceResource.AssigneeId, incidenceResource.AssignedOrganizationId);
                }

                incidence = await repository.GetIncidence(incidence.Id);

                var result = mapper.Map <Incidence, IncidenceResource>(incidence);

                return(Ok(result));
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("Error", "An error occured while performing this operation.");
                return(BadRequest(ModelState));
            }
        }