private void AsignarPorArticulo(string fkarticulo, PedidosModel pedido, OperacionSaldarPedidosModel model)
        {
            var linea = model.Lineas.Single(f => f.Codigo == fkarticulo);

            var cantidadpedida = linea.Cantidadpedida - linea.Cantidadpendiente;

            foreach (var item in pedido.Lineas)
            {
                if (item.Fkarticulos == fkarticulo)
                {
                    var cantidadpendiente = (item.Cantidad ?? 0) - (item.Cantidadpedida ?? 0);
                    var auxcantidad       = cantidadpendiente >= cantidadpedida ? cantidadpedida : cantidadpendiente;
                    item.Cantidadpedida = (item.Cantidadpedida ?? 0) + auxcantidad;
                    if (item.Cantidadpedida < 0)
                    {
                        item.Cantidadpedida = 0;
                    }
                    if (item.Cantidadpedida > item.Cantidad)
                    {
                        item.Cantidadpedida = item.Cantidad;
                    }
                    cantidadpedida -= auxcantidad;
                }
            }
        }
 public void SaldarPedidos(OperacionSaldarPedidosModel model, AlbaranesModel entrega)
 {
     using (var tran = TransactionScopeBuilder.CreateTransactionObject())
     {
         entrega.Pedidosaldado = true;
         SaldarLineaPedidos(model);
         edit(entrega);
         _db.SaveChanges();
         tran.Complete();
     }
 }
        private void SaldarLineaPedidos(OperacionSaldarPedidosModel model)
        {
            var pedidosService      = FService.Instance.GetService(typeof(PedidosModel), _context, _db) as PedidosService;
            var pedidoreferenciaObj = pedidosService.GetByReferencia(model.Fkpedidos);
            var pedidoobj           = pedidosService.get(pedidoreferenciaObj.Id.ToString()) as PedidosModel;



            var agrupacionArticulos = pedidoobj.Lineas.GroupBy(f => f.Fkarticulos);

            foreach (var item in agrupacionArticulos)
            {
                AsignarCantidadesPedidas(item, pedidoobj, model);
            }


            pedidosService.edit(pedidoobj);
        }
        private void AsignarPorArticuloMedidas(string fkarticulos, double?largo, double?ancho, double?grueso, PedidosModel pedido, OperacionSaldarPedidosModel model)
        {
            var linea          = model.Lineas.Single(f => f.Codigo == fkarticulos && Funciones.Qdouble(f.Largo.Replace(".", "").Replace(",", ".")) == largo && Funciones.Qdouble(f.Ancho.Replace(".", "").Replace(",", ".")) == ancho && Funciones.Qdouble(f.Grueso.Replace(".", "").Replace(",", ".")) == grueso);
            var cantidadpedida = linea.Cantidadpedida - linea.Cantidadpendiente;

            foreach (var item in pedido.Lineas)
            {
                if (item.Fkarticulos == fkarticulos &&
                    item.Largo == largo &&
                    item.Ancho == ancho &&
                    item.Grueso == grueso)
                {
                    var cantidadpendiente = (item.Cantidad ?? 0) - (item.Cantidadpedida ?? 0);
                    var auxcantidad       = cantidadpendiente >= cantidadpedida ? cantidadpedida : cantidadpendiente;
                    item.Cantidadpedida = (item.Cantidadpedida ?? 0) + auxcantidad;

                    if (item.Cantidadpedida < 0)
                    {
                        item.Cantidadpedida = 0;
                    }
                    if (item.Cantidadpedida > item.Cantidad)
                    {
                        item.Cantidadpedida = item.Cantidad;
                    }

                    cantidadpedida -= auxcantidad;
                }
            }
        }
        private void AsignarCantidadesPedidas(IGrouping <string, PedidosLinModel> item, PedidosModel pedido, OperacionSaldarPedidosModel model)
        {
            if (pedido.Lineas.Count(f => f.Fkarticulos == item.Key) > 1)
            {
                var agrupacionArticulos =
                    pedido.Lineas.Where(f => f.Fkarticulos == item.Key)
                    .GroupBy(f => new { f.Fkarticulos, f.Largo, f.Ancho, f.Grueso });

                foreach (var lineaarticulo in agrupacionArticulos)
                {
                    AsignarPorArticuloMedidas(lineaarticulo.Key.Fkarticulos, lineaarticulo.Key.Largo,
                                              lineaarticulo.Key.Ancho, lineaarticulo.Key.Grueso, pedido, model);
                }
            }
            else
            {
                AsignarPorArticulo(item.Key, pedido, model);
            }
        }