Пример #1
0
        public static async Task <DataResponse <MovimentStockModel> > Post(MovimentModel model)
        {
            using (var db = BaseService.CreateSampleContext())
            {
                var response = new DataResponse <MovimentStockModel>();
                var resource = await db.GetResourceById(model.ResourceID);

                if (resource == null)
                {
                    response.AddError("ResourceID", "Resource not found");
                }
                else if (model.MovimentTypeID == DataEntities.Enums.MovimentType.Out && model.Quantity > resource.Quantity)
                {
                    response.AddError("Quantity", "It's not possible to carry out a withdrawal, since the current stock is insufficient");
                }

                if (response.Errors.Count > 0)
                {
                    response.ResponseCode = 400;
                    return(response);
                }

                var usuario = await db.GetUserModelBySessionId(db.SessionID.Value);

                switch (model.MovimentTypeID)
                {
                case DataEntities.Enums.MovimentType.In:
                    resource.Quantity += model.Quantity;
                    break;

                case DataEntities.Enums.MovimentType.Out:
                    resource.Quantity -= model.Quantity;
                    break;
                }

                var moviment = new DataEntities.Moviment();
                moviment.MovimentID     = Guid.NewGuid();
                moviment.ResourceID     = resource.ResourceID;
                moviment.UserID         = usuario.UserID;
                moviment.MovimentTypeID = model.MovimentTypeID;
                moviment.Quantity       = model.Quantity;

                await db.Moviments.AddAsync(moviment);

                await db.SaveChangesAsync();

                response.ResponseCode = 200;
                response.Data         = new MovimentStockModel
                {
                    MovimentId       = moviment.MovimentID,
                    NewResourceStock = resource.Quantity
                };
                return(response);
            }
        }
        public static async Task <DataResponse <Guid> > Put(ResourceModel model)
        {
            using (var db = BaseService.CreateSampleContext())
            {
                var response = new DataResponse <Guid>();
                var resource = db.Resources.Find(model.ResourceID);
                if (resource == null)
                {
                    response.AddError("ResourceID", "Resource not found");
                }

                var erros = response.GetErrorsFromModel(model).GetMessageFromErrors();
                if (erros != string.Empty)
                {
                    response.Message      = erros;
                    response.ResponseCode = 400;
                    return(response);
                }

                var session = await db.Sessions.Include(x => x.User)
                              .FirstOrDefaultAsync(u => u.SessionID == db.SessionID);

                var diff = model.Quantity - resource.Quantity;
                resource.Description = model.Description;
                resource.Observation = model.Observation;
                resource.Quantity    = model.Quantity;

                if (diff != 0)
                {
                    var moviment = new DataEntities.Moviment();
                    moviment.MovimentID     = Guid.NewGuid();
                    moviment.ResourceID     = model.ResourceID.Value;
                    moviment.UserID         = session.UserID;
                    moviment.MovimentTypeID = diff > 0 ? DataEntities.Enums.MovimentType.In : DataEntities.Enums.MovimentType.Out;
                    moviment.Quantity       = Math.Abs(diff);
                    await db.Moviments.AddAsync(moviment);
                }
                await db.SaveChangesAsync();

                response.Data         = resource.ResourceID;
                response.ResponseCode = 200;
                return(response);
            }
        }
        public static async Task <DataResponse <Guid> > Post(ResourceModel model)
        {
            using (var db = BaseService.CreateSampleContext())
            {
                var response = new DataResponse <Guid>();
                var erros    = response.GetErrorsFromModel(model).GetMessageFromErrors();
                if (erros != string.Empty)
                {
                    response.Message      = erros;
                    response.ResponseCode = 400;
                    return(response);
                }

                model.ResourceID = Guid.NewGuid();
                var sessao = await db.GetSession(db.SessionID.Value);

                var resource = new DataEntities.Resource();
                resource.ResourceID  = model.ResourceID.Value;
                resource.Description = model.Description;
                resource.Observation = model.Observation;
                resource.Quantity    = model.Quantity;

                var moviment = new DataEntities.Moviment();
                moviment.MovimentID     = Guid.NewGuid();
                moviment.ResourceID     = model.ResourceID.Value;
                moviment.UserID         = sessao.UserID;
                moviment.MovimentTypeID = DataEntities.Enums.MovimentType.In;
                moviment.Quantity       = model.Quantity;

                await db.Resources.AddAsync(resource);

                await db.Moviments.AddAsync(moviment);

                await db.SaveChangesAsync();

                response.Data         = resource.ResourceID;
                response.ResponseCode = 200;
                return(response);
            }
        }