Пример #1
0
        public async Task <ServiceResponse <int> > CreateAsync(SaleDto sale, int userId)
        {
            if (sale == null)
            {
                throw new ArgumentNullException(nameof(sale));
            }

            var entity = sale.ToEntity();

            entity.UpdateCreatedFields(userId).UpdateModifiedFields(userId);

            var location = await UnitOfWork.Get <Location>().GetAsync(entity.LocationID);

            location.UpdateModifiedFields(userId);

            if (entity.ClientID.HasValue)
            {
                var client = await UnitOfWork.Get <Client>().GetAsync(entity.ClientID.Value);

                client.UpdateModifiedFields(userId);
            }

            entity.Recommendations?.UpdateCreatedFields(userId).UpdateModifiedFields(userId);
            entity.Attachments?.UpdateCreatedFields(userId).UpdateModifiedFields(userId);

            var added = UnitOfWork.Get <Sale>().Add(entity);

            await UnitOfWork.SaveAsync();

            return(new SuccessResponse <int>(added.ID));
        }
Пример #2
0
        public async Task <ServiceResponse <SaleDto> > UpdateAsync(SaleDto sale, int userId)
        {
            if (sale == null)
            {
                throw new ArgumentNullException(nameof(sale));
            }

            var existentSale = await UnitOfWork.Get <Sale>().GetAsync(sale.ID);

            if (existentSale == null)
            {
                return(new ServiceResponse <SaleDto>(ServiceResponseStatus.NotFound));
            }

            var goods = UnitOfWork.Get <Goods>()
                        .GetAll(g => g.SaleID == sale.ID, g => g.Storages)
                        .ToList();

            existentSale.Goods = goods;

            foreach (var good in existentSale.Goods)
            {
                if (sale.IsSubmitted && !existentSale.IsSubmitted)
                {
                    good.IsSold = true;
                    good.Storages.OrderBy(st => st.FromDate).Last().ToDate = DateTime.Now;
                }

                if (sale.IsWriteOff)
                {
                    good.Price = 0.0M;
                }

                good.UpdateModifiedFields(userId);

                UnitOfWork.Get <Goods>().Update(good);
            }

            var entity = sale.ToEntity();

            existentSale.TotalPrice      = sale.IsWriteOff ? 0.0M : existentSale.Goods.Sum(g => g.Price);
            existentSale.Attachments     = GetAttachments(existentSale.ID).ToList();
            existentSale.Recommendations = GetRecommendations(existentSale.ID).ToList();
            existentSale
            .UpdateFields(entity)
            .UpdateAttachments(entity, UnitOfWork, userId)
            .UpdateRecommendations(entity, UnitOfWork, userId)
            .UpdateModifiedFields(userId);

            UnitOfWork.Get <Sale>().Update(existentSale);

            await UnitOfWork.SaveAsync();

            return(new SuccessResponse <SaleDto>());
        }