Exemple #1
0
        public async Task <List <SearchedPlan> > Handle(ConfirmPlanCommand request, CancellationToken cancellationToken)
        {
            List <SearchedPlan> result = new List <SearchedPlan>();


            if (request.Id != default(int))
            {
                using (_context)
                {
                    OrganoGram toUpdateRecord = await(from org in _context.OrganoGram
                                                      where org.Id == request.Id
                                                      select org).SingleOrDefaultAsync();

                    toUpdateRecord.StatusId = request.StatusId;

                    await _context.SaveChangesAsync(cancellationToken);

                    result = await _mediator.Send(new Queries.SearchPlanQuery()
                    {
                        Id = toUpdateRecord.Id
                    });
                }
            }

            return(result);
        }
Exemple #2
0
        public async Task <List <SearchedPlan> > Handle(SavePlanCommand request, CancellationToken cancellationToken)
        {
            List <SearchedPlan> result = new List <SearchedPlan>();

            if (request.Id == default(decimal))
            {
                int CurrentUserId = await _currentUser.GetUserId();

                using (var transaction = _context.Database.BeginTransaction())
                {
                    try
                    {
                        List <OrganoGram> List = _context.OrganoGram.Where(o => o.OrganizationId == request.OrganizationId && o.Year == request.Year).ToList();
                        if (List.Any())
                        {
                            throw new BusinessRulesException("اداره در سال انتخاب شده تشکیل دارد");
                        }
                        else
                        {
                            OrganoGram organogram = new OrganoGram()
                            {
                                OrganizationId    = request.OrganizationId,
                                IsPositionsCopied = request.IsPositionsCopied,
                                StatusId          = request.StatusId,
                                Year = request.Year,
                                NumberOfPositions = request.NumberOfPositions
                            };
                            _context.OrganoGram.Add(organogram);
                            await _context.SaveChangesAsync(CurrentUserId, cancellationToken);

                            if (request.IsPositionsCopied == 1)
                            {
                                OrganoGram      orglast = (from a in _context.OrganoGram where a.Year == (request.Year - 1) && a.OrganizationId == request.OrganizationId select a).SingleOrDefault();
                                List <Position> list    = _context.Position.Where(c => c.OrganoGramId == orglast.Id && c.ParentId == null).ToList();

                                if (list.Any())
                                {
                                    await CopyPositionsAsync(list.FirstOrDefault(), organogram.Id, null);
                                }
                            }
                            else
                            {
                                List <Organization> org = await _mediator.Send(new GetOrganiztionQuery()
                                {
                                    Id = organogram.OrganizationId
                                });

                                List <SearchedOrgPosition> orgp = await _mediator.Send(new SearchOrgPositionQuery()
                                {
                                    Id = org.FirstOrDefault().OrgUnitTypeId, Children = false
                                });

                                List <WorkArea> walist = (from a in _context.WorkArea where a.Title.Trim().Equals(org.FirstOrDefault().Dari.Trim()) select a).ToList();
                                if (!walist.Any())
                                {
                                    WorkArea a = new WorkArea();
                                    a.Title = org.FirstOrDefault().Dari.Trim();
                                    await _context.SaveChangesAsync(CurrentUserId, cancellationToken);

                                    walist = (from b in _context.WorkArea where b.Title.Trim().Equals(org.FirstOrDefault().Dari.Trim()) select b).ToList();
                                }
                                List <SearchedPosition> positionresults = await _mediator.Send(new SavePositionCommand()
                                {
                                    WorkingAreaId  = Convert.ToInt32(walist.FirstOrDefault().Id),
                                    PositionTypeId = orgp.FirstOrDefault().Id,
                                    LocationId     = 1,
                                    SalaryTypeId   = 1,
                                    OrganoGramId   = organogram.Id,
                                    Code           = org.FirstOrDefault().Id.ToString() + "0000" + 1.ToString(),
                                    PlanTypeId     = 1
                                });
                            }
                            result = await _mediator.Send(new Queries.SearchPlanQuery()
                            {
                                Id = organogram.Id
                            });
                        }
                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        throw new Exception();
                    }
                }
            }
            else
            {
                OrganoGram toUpdateRecord = await(from org in _context.OrganoGram
                                                  where org.Id == request.Id
                                                  select org).SingleOrDefaultAsync();
                toUpdateRecord.OrganizationId    = request.OrganizationId;
                toUpdateRecord.StatusId          = request.StatusId;
                toUpdateRecord.Year              = request.Year;
                toUpdateRecord.NumberOfPositions = request.NumberOfPositions;
                await _context.SaveChangesAsync(cancellationToken);

                result = await _mediator.Send(new Queries.SearchPlanQuery()
                {
                    Id = toUpdateRecord.Id
                });
            }
            return(result);
        }