public ResultAndError <AlbaranLinea> Add(AlbaranLinea c)
        {
            ResultAndError <AlbaranLinea> result = new ResultAndError <AlbaranLinea>();

            try
            {
                db.AlbaranLineas.Add(c);
                db.SaveChanges();
                return(result.AddResult(c));
            }
            catch (Exception e)
            {
                return(result.AddError(e, HttpStatusCode.InternalServerError));
            }
        }
        public bool DeleteMulti(IEnumerable <KeyValuePair <string, int> > AlbaranLineas)
        {
            List <AlbaranLinea> oAlbaranLineas = new List <AlbaranLinea>();

            foreach (KeyValuePair <string, int> AlbaranLineaNo in AlbaranLineas)
            {
                AlbaranLinea oAlbaranLinea = Get(AlbaranLineaNo.Value, AlbaranLineaNo.Key);
                if (oAlbaranLinea != null)
                {
                    oAlbaranLineas.Add(oAlbaranLinea);
                }
            }
            db.AlbaranLineas.RemoveRange(oAlbaranLineas);
            db.SaveChanges();
            return(true);
        }
 public bool UpdateMulti(IEnumerable <AlbaranLinea> oAlbaranLineas, bool insertIfNoExists = false)
 {
     foreach (AlbaranLinea AlbaranLinea in oAlbaranLineas)
     {
         AlbaranLinea old = Get(AlbaranLinea.No, AlbaranLinea.AlbaranCompraNo);
         if (old == null && insertIfNoExists)
         {
             Add(AlbaranLinea);
         }
         else
         {
             db.Entry(old).CurrentValues.SetValues(AlbaranLinea);
         }
     }
     db.SaveChanges();
     return(true);
 }
 public AlbaranLinea_View(AlbaranLinea a)
 {
     AlbaranCompraNo = a.AlbaranCompraNo;
     No                  = a.No;
     ProductNo           = a.ProductNo ?? "";
     Description         = a.Description ?? "";
     UnitOfMeasure       = a.UnitOfMeasure ?? "";
     Quantity            = a.Quantity ?? 0;
     DirectUnitCost      = a.DirectUnitCost ?? 0;
     VAT                 = a.VAT ?? 0;
     LineDiscount        = a.LineDiscount ?? 0;
     Amount              = a.Amount ?? 0;
     AmountIncludingVAT  = a.AmountIncludingVAT ?? 0;
     ExpectedReceiptdate = a.ExpectedReceiptdate ?? DateTimeOffset.MinValue;
     QuantityReceived    = a.QuantityReceived ?? 0;
     ReadingDate         = a.ReadingDate ?? DateTimeOffset.MinValue;
     OrderNo             = a.OrderNo ?? "";
     OrderLineNo         = a.OrderLineNo ?? "";
     ExcessReception     = a.ExcessReception ?? false;
 }
        public ResultAndError <bool> Delete(int id, string albaranNo)
        {
            ResultAndError <bool> result = new ResultAndError <bool>();

            try
            {
                AlbaranLinea AlbaranLinea = Get(id, albaranNo);
                if (AlbaranLinea == null)
                {
                    return(result.AddError("No se encontro la tarifa con el id " + id));
                }
                db.AlbaranLineas.Remove(AlbaranLinea);
                db.SaveChanges();
                return(result.AddResult(true));
            }
            catch (Exception e)
            {
                return(result.AddError(e, HttpStatusCode.InternalServerError));
            }
        }
        public ResultAndError <AlbaranLinea> Update(AlbaranLinea cr, bool insertIfNoExists = false)
        {
            ResultAndError <AlbaranLinea> result = new ResultAndError <AlbaranLinea>();

            try
            {
                AlbaranLinea old = Get(cr.No, cr.AlbaranCompraNo);
                if (old == null && insertIfNoExists)
                {
                    return(Add(cr));
                }
                db.Entry(old).CurrentValues.SetValues(cr);
                db.SaveChanges();
                return(result.AddResult(cr));
            }
            catch (Exception e)
            {
                return(result.AddError(e, HttpStatusCode.InternalServerError));
            }
        }
        public ResultAndError <bool> UpdateReadingDate(IEnumerable <KeyValuePair <string, int> > albaranes, DateTimeOffset readingDate)
        {
            ResultAndError <bool> result = new ResultAndError <bool>();

            try
            {
                foreach (KeyValuePair <string, int> albaran in albaranes)
                {
                    AlbaranLinea oAlbaranLinea = Get(albaran.Value, albaran.Key);
                    if (oAlbaranLinea == null)
                    {
                        continue;
                    }
                    oAlbaranLinea.ReadingDate = readingDate;
                    db.SaveChanges();
                }
                return(result.AddResult(true));
            }
            catch (Exception e)
            {
                return(result.AddError(e, HttpStatusCode.InternalServerError));
            }
        }
 public IActionResult UpdAlbaranLinea([FromBody] AlbaranLinea AlbaranLinea, bool insertIfNoExists = false)
 {
     return(Ok(aBS.Update(AlbaranLinea, insertIfNoExists)));
 }
        public void RecepcionMercancia(Document oOrder, DateTimeOffset albaranDate, bool nonConform)
        {
            //Comprobamos los precios de los productos con la fecha del albaran
            UpdateProductPrice(oOrder.Lines, oOrder.BuyFromVendorNo, albaranDate);

            //TODO Cuando el usuario valide la información, el sistema comprobará que existe el número de albarán y la fecha del albarán en la cabecera del pedido o lo solicitará
            AlbaranCompra oAlbaran = new AlbaranCompra()
            {
                Amount                 = oOrder.Amount,
                BuyFromAddress         = oOrder.BuyFromAddress,
                BuyFromAddress2        = oOrder.BuyFromAddress2,
                BuyFromCity            = oOrder.BuyFromCity,
                BuyFromContact         = oOrder.BuyFromContact,
                BuyFromCounty          = oOrder.BuyFromCounty,
                BuyFromPostCode        = oOrder.BuyFromPostCode,
                BuyFromVendorName      = oOrder.BuyFromVendorName,
                BuyFromVendorName2     = oOrder.BuyFromVendorName2,
                BuyFromVendorNo        = oOrder.BuyFromVendorNo,
                OrderDate              = oOrder.OrderDate,
                PostingDate            = albaranDate,
                ShortcutDimension1Code = oOrder.Centro,
                ShortcutDimension2Code = oOrder.Zona,
                VendorShipmentNo       = oOrder.VendorShipmentNo,
                OrderNo                = oOrder.No.ToString(),
                No         = "A" + oOrder.No,//añadir numerico
                NonConform = nonConform
            };

            //Creamos el albaran compra
            Update(oAlbaran, true);
            //Actualizamos la cantidad recibida de las lineas
            decimal?totalQuantity = 0;

            foreach (Line line in oOrder.Lines)
            {
                line.OutstandingQuantity -= line.QuantityReceived;
                line.Product.StockActual  = line.OutstandingQuantity;
                totalQuantity            += line.OutstandingQuantity;

                //Añadimos el stock al producto
                prBS.Update(line.Product);
                AlbaranLinea oAlbaranLinea = new AlbaranLinea()
                {
                    AlbaranCompraNo     = oAlbaran.No,
                    Amount              = line.Amount,
                    AmountIncludingVAT  = line.AmountIncludingVAT,
                    Description         = line.Description,
                    DirectUnitCost      = line.DirectUnitCost,
                    ExpectedReceiptdate = line.ExpectedReceiptDate,
                    LineDiscount        = line.LineDiscount,
                    OrderLineNo         = line.LineNo.ToString(),
                    OrderNo             = line.DocumentNo.ToString(),
                    ProductNo           = line.No,
                    Quantity            = line.Quantity,
                    QuantityReceived    = line.QuantityReceived,
                    UnitOfMeasure       = line.UnitOfMeasure,
                    VAT = line.VAT,
                    //Comprobamos que la cantidad recibida es mayor o inferior a la pedida
                    ExcessReception = CalculateExcessReception(line)
                };
                //POnemos a 0 la cantidad recibida de la linea
                line.QuantityReceived = 0;
                //Actualizamos la linea
                ResultAndError <Line> oLine = iBS.Update(line);
                //Creamos el albaranlinea
                ResultAndError <AlbaranLinea> albaranLinea = aBS.Update(oAlbaranLinea, true);
            }
            //TODO Si la cantidad pendiente de todas las líneas del pedido no es cero después de crear el albarán, el sistema dejará el pedido como pendiente, y en el caso de que no vaya a recibirla, el usuario podrá cerrar el pedido, llevándolo entonces al histórico de pedidos.
            if (totalQuantity == 0)
            {
                //Si el total es 0 mandamos el pedido a historico
                hBS.CloseOrder(oOrder);
            }
            else
            {
                //Si no es 0 dejamos el pedido como pendiente y dejamos que el usuario decida si cerrarlo o no
                oOrder.Estado = 0;
                hoBS.Update(oOrder);
            }
        }