Ejemplo n.º 1
0
        private void UpdateAddons(AllianceDto payload)
        {
            var existingAddons = _context.AlianzaAddOns.Include(x => x.InsuranceAddOn).Where(s => s.AlianzaId == payload.Id).Select(s => s).ToList();

            existingAddons.ForEach(x =>
            {
                var exist = payload.AddonList.Contains(x.InsuranceAddOnId);
                if (exist == false)
                {
                    if (x.InsuranceAddOn.Id == 1 || x.InsuranceAddOn.Id == 3)
                    {
                        var existingBeneficieries = _context.Beneficiaries.Where(b => b.AlianzaId == x.AlianzaId);
                        foreach (var item in existingBeneficieries)
                        {
                            item.DeletedAt = DateTime.Now;
                        }
                    }
                    _context.AlianzaAddOns.Remove(x);
                }
                ;
            });

            payload.AddonList.ForEach(x =>
            {
                var exist = existingAddons.FirstOrDefault(ad => ad.InsuranceAddOnId == x);
                if (exist == null)
                {
                    var newAddon = new AlianzaAddOns()
                    {
                        AlianzaId = payload.Id.GetValueOrDefault(), InsuranceAddOnId = x
                    };
                    _context.AlianzaAddOns.Add(newAddon);
                }
            });
        }
Ejemplo n.º 2
0
        public async Task <Alianzas> Update(AllianceDto payload)
        {
            var alliance = await _context.Alianzas.FirstOrDefaultAsync(a => a.Id == payload.Id);

            alliance.StartDate    = payload.StartDate;
            alliance.ElegibleDate = payload.ElegibleDate.GetValueOrDefault();
            alliance.AffType      = payload.AffType;
            alliance.AffStatus    = payload.AffStatus.GetValueOrDefault();
            alliance.CoverId      = payload.CoverId.GetValueOrDefault();
            alliance.Joint        = payload.Joint;
            alliance.Prima        = payload.Prima;
            UpdateBeneficiaries(payload);
            UpdateAddons(payload);
            await _context.SaveChangesAsync();

            alliance = await this.UpdateCost(payload.Id.GetValueOrDefault());

            RemoveCircularDependency(ref alliance);
            if (alliance.ClientProduct != null)
            {
                alliance.ClientProduct.Client.ClientProduct = null;
                alliance.ClientProduct.Client.ClientUser    = null;
                alliance.ClientProduct.Client.Dependents    = null;
                alliance.ClientProduct.Client.Cover         = null;
                alliance.ClientProduct.Alianzas             = null;
            }
            alliance.Cover         = null;
            alliance.Beneficiaries = null;
            return(alliance);
        }
Ejemplo n.º 3
0
        public void Handle(AllianceCreated e)
        {
            var dto = new AllianceDto {
                Id         = e.Id,
                Name       = e.Name,
                ExternalId = e.ExternalId,
                Timestamp  = e.Timestamp,
                Sequence   = e.Sequence
            };

            _repository.Save(dto);
        }
Ejemplo n.º 4
0
        private void UpdateBeneficiaries(AllianceDto payload)
        {
            payload.Beneficiaries.ForEach(x =>
            {
                if (x.Id != null)
                {
                    var beneficiary          = _context.Beneficiaries.FirstOrDefault(b => b.Id == x.Id);
                    beneficiary.Name         = x.Name;
                    beneficiary.Ssn          = x.Ssn;
                    beneficiary.BirthDate    = x.BirthDate;
                    beneficiary.Gender       = x.Gender;
                    beneficiary.Relationship = x.Relationship;
                    beneficiary.Percent      = x.Percent;
                    beneficiary.UpdatedAt    = DateTime.Now;
                    _context.Beneficiaries.Update(beneficiary);
                }
                else
                {
                    var beneficiary          = new Beneficiaries();
                    beneficiary.AlianzaId    = payload.Id;
                    beneficiary.Name         = x.Name;
                    beneficiary.Ssn          = x.Ssn;
                    beneficiary.BirthDate    = x.BirthDate;
                    beneficiary.Gender       = x.Gender;
                    beneficiary.Relationship = x.Relationship;
                    beneficiary.Percent      = x.Percent;
                    beneficiary.UpdatedAt    = DateTime.Now;
                    _context.Beneficiaries.Add(beneficiary);
                }
            });
            var existing = _context.Beneficiaries.Where(b => b.AlianzaId == payload.Id).ToList();

            existing.ForEach(ex =>
            {
                var exist = payload.Beneficiaries.FirstOrDefault(b => b.Ssn == ex.Ssn);
                if (exist == null)
                {
                    ex.DeletedAt = DateTime.Now;
                    _context.Beneficiaries.Update(ex);
                }
            });
        }
Ejemplo n.º 5
0
 public async Task <IActionResult> Create([FromBody] AllianceDto payload)
 {
     try
     {
         var res = new Alianzas();
         if (payload.Id == null)
         {
             res = await _service.Create(payload);
         }
         else
         {
             res = await _service.Update(payload);
         }
         return(Ok(res));
     }
     catch (AppException ex)
     {
         // return error message if there was an exception
         return(DefaultError(ex));
     }
 }
Ejemplo n.º 6
0
        public AllianceDto GetAlliance(string name)
        {
            var query = _reportingRepository.QueryFor <IAllianceByNameQuery>(c => c.Name = name);
            var dto   = query.Execute();

            if (dto == null)
            {
                var sequence = _reportingRepository.GetNextSequenceFor <AllianceDto>();
                var uid      = SystemIdGenerator.Next();

                _bus.Send(new CreateAlliance(uid, sequence, name, 0));

                dto = new AllianceDto {
                    ExternalId = 0,
                    Id         = uid,
                    Name       = name,
                    Sequence   = sequence,
                    Timestamp  = SystemDateTime.Now()
                };
            }

            return(dto);
        }
Ejemplo n.º 7
0
        private async Task <int> defineAfftype(AllianceDto payload, int afftype)
        {
            var lastAliance = await _context.ClientProduct
                              .Join(_context.Alianzas
                                    .Include(x => x.ClientUser)
                                    .ThenInclude(x => x.Client)
                                    .Include(x => x.Cover)
                                    .ThenInclude(s => s.HealthPlan)
                                    , c => c.Id,
                                    a => a.ClientProductId,
                                    (c, a) => a).FirstOrDefaultAsync(s => s.ClientProduct.ClientId == payload.ClientId);

            var newCover = await _context.Covers.Include(x => x.HealthPlan).FirstOrDefaultAsync(x => x.Id == payload.CoverId);


            if (lastAliance?.Cover == null)
            {
                afftype = 1;
            }
            else if (lastAliance?.Cover?.Name.ToLower().Trim() == newCover.Name.ToLower().Trim())
            {
                if (lastAliance?.Cover?.Id == payload.CoverId)
                {
                    afftype = 3;
                }
                else
                {
                    afftype = 2;
                }
            }
            else if (lastAliance?.Cover?.HealthPlan?.Id != newCover.HealthPlan.Id)
            {
                afftype = 6;
            }

            return(afftype);
        }
Ejemplo n.º 8
0
        public async Task <Alianzas> Create(AllianceDto payload)
        {
            var afftype = 1;

            //setting aff type
            afftype = await defineAfftype(payload, afftype);

            //adding productclient to fill required field in aliance
            var clientProduct = new ClientProduct()
            {
                ClientId  = payload.ClientId.GetValueOrDefault(),
                CreatedAt = DateTime.Now,
                UpdatedAt = DateTime.Now,
                ProductId = 1,
                Status    = 0
            };
            await _context.ClientProduct.AddAsync(clientProduct);

            await _context.SaveChangesAsync();

            // creating actual aliance
            var alianza = new Alianzas()
            {
                ClientProductId   = clientProduct.Id,
                QualifyingEventId = payload.QualifyingEventId == null ? 1 : payload.QualifyingEventId.Value,
                CoverId           = payload.CoverId.GetValueOrDefault(),
                AffType           = (byte?)afftype,
                AffStatus         = 1,
                ElegibleDate      = DateTime.Now,
                StartDate         = DateTime.Now,
                CreatedAt         = DateTime.Now,
                UpdatedAt         = DateTime.Now,
                EndDate           = DateTime.Now.AddYears(1),
                Joint             = payload.Joint,
                Prima             = payload.Prima
            };

            //TODO: check if the status of the aliance is complete or pending
            //for the moment is complete

            await _context.Alianzas.AddAsync(alianza);

            await _context.SaveChangesAsync();

            alianza = await this.UpdateCost(alianza.Id);

            foreach (var item in payload.Beneficiaries)
            {
                var beneficiary = new Beneficiaries()
                {
                    Name         = item.Name,
                    BirthDate    = item.BirthDate,
                    Gender       = item.Gender,
                    Percent      = item.Percent,
                    Relationship = item.Relationship,
                    CreatedAt    = DateTime.Now,
                    UpdatedAt    = DateTime.Now,
                    AlianzaId    = alianza.Id,
                    Ssn          = item.Ssn
                };
                await _context.Beneficiaries.AddAsync(beneficiary);
            }

            foreach (var item in payload.AddonList)
            {
                var addonId = item;
                await _context.AlianzaAddOns.AddAsync(new AlianzaAddOns()
                {
                    AlianzaId = alianza.Id, InsuranceAddOnId = addonId
                });
            }
            await _context.SaveChangesAsync();

            if (alianza.ClientProduct != null)
            {
                alianza.ClientProduct.Client.ClientProduct = null;
                alianza.ClientProduct.Client.ClientUser    = null;
                alianza.ClientProduct.Client.Dependents    = null;
                alianza.ClientProduct.Client.Cover         = null;
                alianza.ClientProduct.Alianzas             = null;
            }
            alianza.Cover = null;
            RemoveCircularDependency(ref alianza);
            alianza.Beneficiaries = null;
            return(alianza);
        }