Exemplo n.º 1
0
            public async Task <Unit> Handle(Commmand request, CancellationToken cancellationToken)
            {
                var plan = await _context.Plans.FindAsync(request.Id);

                if (plan == null)
                {
                    throw new Exception("Plan bulunamadı.");
                }

                plan.Name         = request.Name ?? plan.Name;
                plan.ActualMPR    = request.ActualMPR ?? plan.ActualMPR;
                plan.MinimumScope = request.MinimumScope ?? plan.MinimumScope;
                plan.TeamId       = request.TeamId;
                plan.DeductionMPR = request.DeductionMPR;
                if (plan.Deduction != null)
                {
                    _context.Deductions.Remove(plan.Deduction);
                }
                if (plan.Induction != null)
                {
                    _context.Inductions.Remove(plan.Induction);
                }

                var deduction = new Deduction {
                    Id = new Guid(), PlanId = plan.Id, AnnualWorkingDay = request.Deduction.AnnualWorkingDay, AverageFrequency = request.Deduction.AverageFrequency, DailyVisit = request.Deduction.DailyVisit, MonthlyTargetMPR = request.Deduction.MonthlyTargetMPR, MonthlyTargetVisitFrequency = request.Deduction.MonthlyTargetVisitFrequency, MonthlyVisitCapacity = request.Deduction.MonthlyVisitCapacity, MonthlyWorkingDay = request.Deduction.MonthlyWorkingDay, TargetedTotalPhysician = request.Deduction.TargetedTotalPhysician, TargetedTotalVisit = request.Deduction.TargetedTotalVisit
                };

                _context.Deductions.Add(deduction);
                foreach (var dd in request.Deduction.DeductionDetails)
                {
                    var deductionDetail = new DeductionDetail {
                        Id = new Guid(), DeductionId = deduction.Id, DepartmentId = dd.DepartmentId, PhysicianUniverse = dd.PhysicianUniverse, PhysicianUniverseCovered = dd.PhysicianUniverseCovered, Scope = dd.Scope, ScopeCount = dd.ScopeCount
                    };
                    _context.DeductionDetails.Add(deductionDetail);
                    foreach (var s in dd.Segments)
                    {
                        var segment = new Segment {
                            Id = new Guid(), DeductionDetailId = deductionDetail.Id, Rate = s.Rate, TargetCount = s.TargetCount, TargetFrequency = s.TargetFrequency, Visit = s.Visit
                        };
                        _context.Segments.Add(segment);
                    }
                }
                var success = await _context.SaveChangesAsync() > 0;

                if (success)
                {
                    return(Unit.Value);
                }
                throw new Exception("Hata oluştu.");
            }
Exemplo n.º 2
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var plan = new Plan {
                    Id = new Guid(), Name = request.Name, ActualMPR = request.ActualMPR, MinimumScope = request.MinimumScope, TeamId = request.TeamId, Active = true, Created = DateTime.Now, Deduction = new Deduction {
                        Id = new Guid(), DeductionDetails = new List <DeductionDetail>()
                    }, Induction = new Induction {
                        Id = new Guid(), InductionDetails = new List <InductionDetail>()
                    }
                };


                var marketTotal = (from mc in _context.MarketCities.ToArray()
                                   join c in request.Cities on mc.CityId equals c.Id
                                   join m in request.Markets on mc.MarketId equals m.Id
                                   select mc).Sum(mc => mc.Amount);
                var physicianTotal = (from dc in _context.DepartmentCities.ToArray() join c in request.Cities on dc.CityId equals c.Id join d in request.Departments on dc.DepartmentId equals d.Id select dc).Sum(dc => dc.PhysicianCount);

                foreach (var city in request.Cities)
                {
                    var marketCityTotal = (from mc in _context.MarketCities.ToArray()
                                           join c in request.Cities on mc.CityId equals c.Id
                                           join m in request.Markets on mc.MarketId equals m.Id
                                           where mc.CityId == city.Id
                                           select mc).Sum(mc => mc.Amount);

                    var physicianCityTotal = (from dc in _context.DepartmentCities.ToArray()
                                              join c in request.Cities on dc.CityId equals c.Id
                                              join d in request.Departments on dc.DepartmentId equals d.Id
                                              where dc.CityId == city.Id
                                              select dc).Sum(dc => dc.PhysicianCount);

                    var inductionDetail = new InductionDetail {
                        Id = new Guid(), Market = marketCityTotal, MarketGeographicRatio = (marketCityTotal / marketTotal) * 100, PhysicianCount = physicianCityTotal, PhysicianGeographicRatio = (physicianCityTotal / physicianTotal) * 100, CityId = city.Id
                    };
                    plan.Induction.InductionDetails.Add(inductionDetail);
                }
                foreach (var department in request.Departments)
                {
                    var physicianUniverse = (from dc in _context.DepartmentCities.ToArray() join c in request.Cities on dc.CityId equals c.Id where dc.DepartmentId == department.Id select dc).Sum(dc => dc.PhysicianCount);
                    var deductionDetail   = new DeductionDetail {
                        Id = new Guid(), DepartmentId = department.Id, PhysicianUniverse = physicianUniverse, PhysicianUniverseCovered = 100, Segments = new List <Segment>()
                    };
                    //deductionDetail.Segments.Add(new Segment { Id = new Guid(), Rate = 0, TargetCount = 0, TargetFrequency = 0, Visit = 0 });
                    //deductionDetail.Segments.Add(new Segment { Id = new Guid(), Rate = 0, TargetCount = 0, TargetFrequency = 0, Visit = 0 });
                    //deductionDetail.Segments.Add(new Segment { Id = new Guid(), Rate = 0, TargetCount = 0, TargetFrequency = 0, Visit = 0 });
                    plan.Deduction.DeductionDetails.Add(deductionDetail);
                }
                await _context.Plans.AddAsync(plan);

                foreach (var market in request.Markets)
                {
                    await _context.PlanMarkets.AddAsync(new PlanMarket { PlanId = plan.Id, MarketId = market.Id });
                }
                var success = await _context.SaveChangesAsync() > 0;

                if (success)
                {
                    return(Unit.Value);
                }
                throw new Exception("Hata oluştu.");
            }