Esempio n. 1
0
        public async Task <IHttpActionResult> SetOrder(NewOrderModelIn modelIn)
        {
            try
            {
                if (modelIn.IsNull())
                {
                    return(BadRequest(new ApiMessageResponse <NewOrderModelOut>("Modelo Inválido")));
                }
                if (!ModelState.IsValid)
                {
                    var errors = ModelState.GetModelErrors();

                    return(BadRequest(new ApiMessageResponse <NewOrderModelOut>(ModelState.StringifyModelErrors())));
                }


                OrderService _orderService = new OrderService();


                var ret = await _orderService.SetNewOrderAsync(modelIn);


                return(Ok(new ApiMessageResponse <NewOrderModelOut>(ret)));
            }
            catch (Exception ex)
            {
                return(BadRequest(new ApiMessageResponse <TokenModelOut>(ex.GetFirstException().Message)));
            }
        }
        public async Task <NewOrderModelOut> SetNewOrderAsync(NewOrderModelIn modelIn)
        {
            //cantidad de productos

            if (modelIn.OrderDetails == null || modelIn.OrderDetails.Count() == 0)
            {
                throw new Exception("No existen productos asociados a esta orden.");
            }


            if (modelIn.OrderDetails.Count() > 5)
            {
                throw new Exception("Solo se pueden registrar hasta 5 productos por orden.");
            }

            var retOrderInsert = await db.Database.SqlQuery <GetResponseOrderDb>("sp_new_order @customer_id,@delivery_address",
                                                                                 new SqlParameter("customer_id", modelIn.CustomerId),
                                                                                 new SqlParameter("delivery_address", modelIn.DeliveryAddress)
                                                                                 ).FirstOrDefaultAsync();


            if (retOrderInsert == null)
            {
                throw new Exception("Error al ingresar la Orden. Error DataBase.");
            }

            if (retOrderInsert.state == 0)
            {
                throw new Exception($"Error al ingresar la Orden. Error DataBase.{retOrderInsert.msg}");
            }

            foreach (NewOrderDetailModelIn orderDetail in modelIn.OrderDetails)
            {
                var retOrderDetailInsert = db.Database.SqlQuery <GetResponseOrderDb>("sp_new_order_detail @order_id,@product_id,@count",
                                                                                     new SqlParameter("order_id", retOrderInsert.id),
                                                                                     new SqlParameter("product_id", orderDetail.ProductId),
                                                                                     new SqlParameter("count", orderDetail.Count)
                                                                                     ).FirstOrDefault();

                if (retOrderDetailInsert == null)
                {
                    this.CallBackNewOrder(retOrderInsert.id);
                    throw new Exception("Error al ingresar el detalle de la Orden. Error DataBase.");
                }

                if (retOrderDetailInsert.state == 0)
                {
                    this.CallBackNewOrder(retOrderInsert.id);
                    throw new Exception($"Error al ingresar el detalle de la Orden. Error DataBase.{retOrderDetailInsert.msg}");
                }
            }



            return(new NewOrderModelOut {
                Id = retOrderInsert.id
            });
        }