public async Task <bool> ChangeIPermitStatus(ImportStatusLog ipermit, ImportPermitStatuses status) { var toStatus = (await _importPermitStatus.GetAsync(s => s.ImportPermitStatusCode == status.ToString())); var iimport = await base.GetAsync(ipermit.ID); var fromId = iimport.ImportPermitStatusID; iimport.ImportPermitStatusID = toStatus.ID; if (toStatus.ImportPermitStatusCode == "APR") { iimport.ExpiryDate = await GetExpiryDate(iimport.SupplierID, iimport.ImportPermitDetails); } var originaliimport = new ImportPermit(); originaliimport.CopyProperties(iimport); //users for notification var users = new List <User> () { originaliimport.User }; if (toStatus.ImportPermitStatusCode == "RQST") { iimport.RequestedDate = DateTime.UtcNow; var cst = (await _userRoleService.FindByAsync(us => us.Role.RoleCode == "CST" && us.IsActive && us.User.IsActive)).Select(u => u.User); users.AddRange(cst); } var resultUpdate = await base.UpdateAsync(iimport); var result = false; if (resultUpdate) { var importLog = new ImportPermitLogStatus() { FromStatusID = fromId, ToStatusID = toStatus.ID, IsCurrent = true, Comment = ipermit.Comment, ModifiedByUserID = ipermit.ChangedBy, ImportPermitID = ipermit.ID }; result = await _importLog.CreateAsync(importLog); } if (resultUpdate && result) { Notify(toStatus.ImportPermitStatusCode, toStatus.Name, iimport.ImportPermitNumber, users); } return(resultUpdate && result); }
/// <summary> /// /// </summary> /// <param name="ipermit"></param> /// <returns></returns> public async Task <bool> CreateImportPermitAsync(ImportPermitBusinessModel ipermit) { //Calculate Amount from Details ipermit.ImportPermit.Amount = ipermit.ImportPermit.FreightCost + (ipermit.ImportPermit.Insurance ?? 0) + (ipermit.ImportPermit.ImportPermitDetails.Sum(x => ((x.Quantity * x.UnitPrice) - (x.Discount ?? 0)))) - (ipermit.ImportPermit.Discount ?? 0); string statusCode = ipermit.IsDraft ? "DRFT" : "RQST"; var status = await _importPermitStatus.GetAsync(s => s.ImportPermitStatusCode == statusCode); ipermit.ImportPermit.ImportPermitStatusID = status.ID; ipermit.ImportPermit.RowGuid = ipermit.Identifier; //Set RequestedDate if application is not draft ipermit.ImportPermit.RequestedDate = ipermit.IsDraft ? (Nullable <DateTime>)null : DateTime.UtcNow; ipermit.ImportPermit.ExpiryDate = await GetExpiryDate(ipermit.ImportPermit.SupplierID, ipermit.ImportPermit.ImportPermitDetails); ipermit.ImportPermit.CreatedDate = ipermit.ImportPermit.ModifiedDate = DateTime.UtcNow; //Set SubmoduleID for PIP Type var ipType = await _importPermitTypeService.GetAsync(ipermit.ImportPermit.ImportPermitTypeID); if (ipType.ImportPermitTypeCode == "PIP") { var agent = await _agentService.GetAsync(ipermit.ImportPermit.AgentID); var submodule = await _submoduleService.GetAsync(s => s.SubmoduleCode == agent.AgentType.AgentTypeCode); ipermit.ImportPermit.SubmoduleID = submodule?.ID; } var result = await base.CreateAsync(ipermit.ImportPermit); bool docResult = true, logStatus = true; if (result) { var savedImportPermit = (await base.GetAsync(ip => ip.RowGuid == ipermit.ImportPermit.RowGuid, true)); foreach (var doc in ipermit.Documents) { doc.ReferenceID = savedImportPermit.ID; var savedDoc = await _documentService.GetAsync(doc.ID); savedDoc.CopyProperties(doc); docResult = docResult && await _documentService.UpdateAsync(savedDoc); } var importLog = new ImportPermitLogStatus() { ToStatusID = status.ID, IsCurrent = true, Comment = $"New {savedImportPermit.ImportPermitType.Name} Created", ModifiedByUserID = savedImportPermit.CreatedByUserID, ImportPermitID = savedImportPermit.ID }; logStatus = await _importLog.CreateAsync(importLog); //Send email if (!ipermit.IsDraft) { //bring CST user var cst = (await _userRoleService.FindByAsync(us => us.Role.RoleCode == "CST" && us.IsActive)).Select(u => u.User).Where(u => u.IsActive); var users = new List <User> () { savedImportPermit.User }; users.AddRange(cst); Notify(savedImportPermit.ImportPermitStatus.ImportPermitStatusCode, savedImportPermit.ImportPermitStatus.Name, savedImportPermit.ImportPermitNumber, users); } //Delete Related WIP var wip = await _wipService.GetAsync(w => w.RowGuid == ipermit.Identifier); if (wip != null) { await _wipService.DeleteAsync(wip.ID); } } return(result && docResult && logStatus); }