Esempio n. 1
0
        public async Task <Model.Certificate360> Invoke()
        {
            var certificate360 =
                await _dbContext.Certificate360.GetCertificateByCertNo(_certificateNumber);

            var history = new Certificate360History
            {
                RequestID     = _request.ID,
                RefID         = _request.RefID,
                RequestorID   = _request.RequestorID,
                RequestorName = _request.RequestorName,
                AgentID       = _request.AgentID,
                AgentName     = _request.AgentName,
                IssuedOn      = certificate360.IssuedOn,
                ExpiresOn     = certificate360.ExpiresOn,
                SerialNo      = certificate360.SerialNo,
                ApprovedBy    = _approvedBy?.ID,
                ApprovedOn    = DateTimeOffset.UtcNow,
                CertificateID = certificate360.ID
            };

            await _dbContext.Certificate360.InsertCertificate360History(history);

            await _dbContext.Certificate360.DeleteAllCertificate360Menus(certificate360.ID);

            await _dbContext.Certificate360.DeleteAllCertificate360Ingredients(certificate360.ID);

            await _dbContext.Certificate360.DeleteAllCertificate360Teams(certificate360.ID);

            var menus = (await _dbContext.Menu.Query(new MenuFilter
            {
                RequestID = _request.ID,
                Scheme = certificate360.Scheme
            }))?
                        .Where(e => e.ChangeType != ChangeType.Delete)?
                        .Select(e => e.ID)?
                        .ToList();

            await _dbContext.Certificate360.MapCertificate360ToMenus(certificate360.ID, menus);

            var ingredients = (await _dbContext.Ingredient.Query(
                                   new IngredientFilter {
                RequestID = _request.ID
            }))?
                              .Where(e => e.ChangeType != ChangeType.Delete)?
                              .Select(e => e.ID)?
                              .ToList();

            await _dbContext.Certificate360.MapCertificate360ToIngredients(certificate360.ID,
                                                                           ingredients);

            var teams = _request.Teams?
                        .Where(e => e.ChangeType != ChangeType.Delete)?
                        .Select(e => e.ID)?
                        .ToList();

            await _dbContext.Certificate360.MapCertificate360ToTeams(certificate360.ID, teams);

            return(certificate360);
        }
Esempio n. 2
0
        public async Task <long> InsertCertificate360History(Certificate360History entity)
        {
            var param = new DynamicParameters();

            param.Add("@RequestID", entity.RequestID);
            param.Add("@RefID", entity.RefID);
            param.Add("@RequestorID", entity.RequestorID);
            param.Add("@RequestorName", entity.RequestorName);
            param.Add("@AgentID", entity.AgentID);
            param.Add("@AgentName", entity.AgentName);
            param.Add("@Duration", entity.Duration);
            param.Add("@IssuedOn", entity.IssuedOn);
            param.Add("@ExpiresOn", entity.ExpiresOn);
            param.Add("@SerialNo", entity.SerialNo);
            param.Add("@ApprovedOn", entity.ApprovedOn);
            param.Add("@ApprovedBy", entity.ApprovedBy);
            param.Add("@CertificateID", entity.CertificateID);
            param.Add("@ID", dbType: DbType.Int64, direction: ParameterDirection.Output);

            await SqlMapper.ExecuteAsync(_unitOfWork.Connection,
                                         "InsertCertificate360History",
                                         param,
                                         commandType : CommandType.StoredProcedure,
                                         transaction : _unitOfWork.Transaction);

            return(param.Get <long>("@ID"));
        }
Esempio n. 3
0
        public Certificate360 Map(Certificate360 certificate, Certificate360History certHistory,
                                  Menu certMenu, Ingredient certIng,
                                  Premise certPremise, Customer certCustomer, HalalTeam certHalalTeam)
        {
            if (!_certificateCache.TryGetValue(certificate.ID, out Certificate360 result))
            {
                certificate.Teams = new List <HalalTeam>();
                //certificate.History = new List<CertificateHistory>();
                certificate.Menus = new List <Menu>();
                //certificate.Ingredients = new List<Ingredient>();
                certificate.Premise = new Premise();
                //certificate.Customer = new Customer();

                _certificateCache[certificate.ID] = certificate;
                result = certificate;
            }
            if (certHistory.ID != 0)
            {
                if (!_certHistoryCache.TryGetValue(certHistory.ID, out Certificate360History certHistOut))
                {
                    _certHistoryCache[certHistory.ID] = certHistory;
                    certHistOut = certHistory;
                    //result.History.Add(certHistory);
                }
            }

            if (certMenu.ID != 0)
            {
                if (!_certMenuCache.TryGetValue(certMenu.ID, out Menu certMenuOut))
                {
                    _certMenuCache[certMenu.ID] = certMenu;
                    certMenuOut = certMenu;
                    result.Menus.Add(certMenu);
                }
            }

            if (certIng.ID != 0)
            {
                if (!_certIngCache.TryGetValue(certIng.ID, out Ingredient certIngOut))
                {
                    _certIngCache[certIng.ID] = certIng;
                    certIngOut = certIng;
                    //result.Ingredients.Add(certIng);
                }
            }

            if (certPremise.ID != 0)
            {
                if (!_certPremiseCache.TryGetValue(certPremise.ID, out Premise certPremiseOut))
                {
                    _certPremiseCache[certPremise.ID] = certPremise;
                    certPremiseOut = certPremise;
                    result.Premise = certPremise;
                }
            }


            if (!_certCustomerCache.TryGetValue(certCustomer.ID, out Customer certCustomerOut))
            {
                _certCustomerCache[certCustomer.ID] = certCustomer;
                certCustomerOut = certCustomer;
                //result.Customer = certCustomer;
            }

            if (certHalalTeam.ID != 0)
            {
                if (!_certHalalTeamCache.ContainsKey(certHalalTeam.ID))
                {
                    _certHalalTeamCache[certHalalTeam.ID] = certHalalTeam;
                    result.Teams.Add(certHalalTeam);
                }
            }

            return(result);
        }
        public async Task <Model.Certificate360> Invoke()
        {
            var certificate360 =
                await _dbContext.Certificate360.GetCertificateByCertNo(_certificate.Number)
                ?? new Model.Certificate360();

            certificate360.Number        = _certificate.Number;
            certificate360.Status        = CertificateStatus.Active;
            certificate360.Template      = _certificate.Template;
            certificate360.Scheme        = _certificate.Scheme;
            certificate360.SubScheme     = _certificate.SubScheme;
            certificate360.IssuedOn      = _certificate.IssuedOn;
            certificate360.ExpiresOn     = _certificate.ExpiresOn;
            certificate360.SerialNo      = _certificate.SerialNo;
            certificate360.CustomerID    = _request.CustomerID;
            certificate360.CustomerName  = _request.CustomerName;
            certificate360.RequestorID   = _request.RequestorID;
            certificate360.RequestorName = _request.RequestorName;
            certificate360.AgentID       = _request.AgentID;
            certificate360.AgentName     = _request.AgentName;
            certificate360.PremiseID     = _certificate.PremiseID;

            // Only case where existing certifcate is not yet available.
            // Probably from old data.
            if (certificate360.ID == 0)
            {
                certificate360.ID = await _dbContext.Certificate360.InsertCertificate360(certificate360);
            }
            else
            {
                await _dbContext.Certificate360.UpdateCertificate360(certificate360);
            }

            var history = new Certificate360History
            {
                RequestID     = _request.ID,
                RefID         = _request.RefID,
                RequestorID   = _request.RequestorID,
                RequestorName = _request.RequestorName,
                AgentID       = _request.AgentID,
                AgentName     = _request.AgentName,
                IssuedOn      = _certificate.IssuedOn,
                ExpiresOn     = _certificate.ExpiresOn,
                SerialNo      = _certificate.SerialNo,
                ApprovedBy    = _approvedBy?.ID,
                ApprovedOn    = DateTimeOffset.UtcNow,
                CertificateID = certificate360.ID
            };

            await _dbContext.Certificate360.InsertCertificate360History(history);

            var menus = (await _dbContext.Menu.Query(new MenuFilter
            {
                RequestID = _request.ID,
                Scheme = _certificate.Scheme
            }))?
                        .Where(e => e.ChangeType != ChangeType.Delete)?
                        .Select(e => e.ID)?
                        .ToList();

            await _dbContext.Certificate360.MapCertificate360ToMenus(certificate360.ID, menus);

            var ingredients = (await _dbContext.Ingredient.Query(
                                   new IngredientFilter {
                RequestID = _request.ID
            }))?
                              .Where(e => e.ChangeType != ChangeType.Delete)?
                              .Select(e => e.ID)?
                              .ToList();

            await _dbContext.Certificate360.MapCertificate360ToIngredients(certificate360.ID,
                                                                           ingredients);


            return(certificate360);
        }
        public async Task <Model.Certificate360> Invoke()
        {
            Model.Certificate360 result = null;

            // This assumes there will only be one lineitem for HC01. Else, need to reconsider.
            var lineItem = _request.LineItems?.FirstOrDefault();

            if (lineItem != null)
            {
                var certificate360 =
                    await _dbContext.Certificate360.GetCertificateByCertNo(_certificateNumber);

                if (certificate360 == null)
                {
                    var premise = _request.Premises?.FirstOrDefault(e => e.IsPrimary);
                    if (premise == null)
                    {
                        throw new BadRequestException("Primary premise not defined.");
                    }

                    certificate360 = new Model.Certificate360
                    {
                        Number        = _certificateNumber,
                        Status        = CertificateStatus.Active,
                        Scheme        = lineItem.Scheme.Value,
                        SubScheme     = lineItem.SubScheme,
                        CustomerID    = _request.CustomerID,
                        CustomerName  = _request.CustomerName,
                        RequestorID   = _request.RequestorID,
                        RequestorName = _request.RequestorName,
                        AgentID       = _request.AgentID,
                        AgentName     = _request.AgentName,
                        PremiseID     = premise.ID
                    };

                    certificate360.ID = await _dbContext.Certificate360.InsertCertificate360(certificate360);
                }

                var history = new Certificate360History
                {
                    RequestID     = _request.ID,
                    RefID         = _request.RefID,
                    RequestorID   = _request.RequestorID,
                    RequestorName = _request.RequestorName,
                    AgentID       = _request.AgentID,
                    AgentName     = _request.AgentName,
                    IssuedOn      = certificate360.IssuedOn,
                    ExpiresOn     = certificate360.ExpiresOn,
                    SerialNo      = certificate360.SerialNo,
                    ApprovedOn    = DateTimeOffset.UtcNow,
                    CertificateID = certificate360.ID
                };

                await _dbContext.Certificate360.InsertCertificate360History(history);

                await _dbContext.Certificate360.DeleteAllCertificate360Teams(certificate360.ID);

                var teams = _request.Teams?
                            .Where(e => e.ChangeType != ChangeType.Delete)?
                            .Select(e => e.ID)?
                            .ToList();

                await _dbContext.Certificate360.MapCertificate360ToTeams(certificate360.ID, teams);
            }

            return(result);
        }