示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }