public IActionResult UpdCabecera([FromBody] Document header, bool insertIfNoExists = false)
 {
     return(Ok(hBS.Update(header, 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);
            }
        }