private void ReparteCoste(List <TraspasosalmacenLinModel> lineas, List <TraspasosalmacenCostesadicionalesModel> costes, dynamic reparto) { TipoReparto tiporeparto = reparto.Tiporeparto; TipoCoste tipocoste = reparto.Tipocoste; var costeTotal = costes.Where(f => f.Tiporeparto == tiporeparto && f.Tipocoste == tipocoste).Sum(f => f.Total); var costeUnidad = 0.0; if (tiporeparto == TipoReparto.Cantidad) { var d = costeTotal / lineas.Sum(f => f.Cantidad); if (d != null) { costeUnidad = (double)d; } } else if (tiporeparto == TipoReparto.Importe) { var d = costeTotal / lineas.Sum(f => f.Importe); if (d != null) { costeUnidad = (double)d; } } else if (tiporeparto == TipoReparto.Metros) { var d = costeTotal / lineas.Sum(f => f.Metros); if (d != null) { costeUnidad = (double)d; } } else if (tiporeparto == TipoReparto.Peso) { var d = costeTotal / lineas.Sum(f => (f.Largo * f.Ancho * f.Grueso)); if (d != null) { costeUnidad = (double)d; } //var unidadesService = FService.Instance.GetService(typeof(UnidadesModel), _context, _db) as UnidadesService; //var d = costeTotal / lineas.Sum(f => ModeloNegocioFunciones.CalculaEquivalentePeso(((UnidadesModel)unidadesService.get(f.Fkunidades)).Formula == TipoStockFormulas.Superficie, f.Metros ?? 0, f.Grueso ?? 0)); //if (d != null) // costeUnidad = (double)d; } RepartirCosteEnLinea(lineas, tiporeparto, tipocoste, costeTotal ?? 0, costeUnidad); }
private void RepartirCosteEnLinea(List <ImputacionCostesLinModel> lineas, TipoReparto reparto, TipoCoste coste, double costeTotal, double costeUnidad) { foreach (var item in lineas) { item.Flagidentifier = Guid.NewGuid(); var costeLineas = 0.0; if (reparto == TipoReparto.Cantidad) { var d = item.Cantidad * costeUnidad; if (d != null) { costeLineas = (double)d; } } else if (reparto == TipoReparto.Importe) { throw new ValidationException(RImputacionCostes.ErrorRepartoImporte); } else if (reparto == TipoReparto.Metros) { var d = item.Metros * costeUnidad; if (d != null) { costeLineas = (double)d; } } else if (reparto == TipoReparto.Peso) { var d = item.Largo * item.Ancho * item.Grueso * costeUnidad; if (d != null) { costeLineas = (double)d; } //var unidadesService = FService.Instance.GetService(typeof(UnidadesModel), _context, _db) as UnidadesService; //var d = ModeloNegocioFunciones.CalculaEquivalentePeso(((UnidadesModel)unidadesService.get(item.Fkunidades)).Formula == TipoStockFormulas.Superficie, item.Metros ?? 0, item.Grueso ?? 0) * costeUnidad; //if (d != null) costeLineas = (double)d; } costeLineas = Math.Round(costeLineas, item.Decimalesmonedas ?? 2); if (coste == TipoCoste.Material) { item.Costeadicionalmaterial += costeLineas; } else if (coste == TipoCoste.Otros) { item.Costeadicionalotro += costeLineas; } else if (coste == TipoCoste.Portes) { item.Costeadicionalportes += costeLineas; } costeTotal -= costeLineas; } //Esto lo hacemos para asegurarnos de que los costes cuadran con lo que se debe asignar ya que puede haber problemas de redondeos if (costeTotal != 0) { var ultimaLinea = lineas.LastOrDefault(); if (ultimaLinea != null) { costeTotal = Math.Round(costeTotal, ultimaLinea.Decimalesmonedas ?? 3); if (coste == TipoCoste.Material) { ultimaLinea.Costeadicionalmaterial += costeTotal; } else if (coste == TipoCoste.Otros) { ultimaLinea.Costeadicionalotro += costeTotal; } else if (coste == TipoCoste.Portes) { ultimaLinea.Costeadicionalportes += costeTotal; } } } }
private void RepartirCosteEnLinea(List <TraspasosalmacenLinModel> lineas, TipoReparto reparto, TipoCoste coste, double costeTotal, double costeUnidad) { foreach (var item in lineas) { item.Flagidentifier = Guid.NewGuid(); var costeLineas = 0.0; if (reparto == TipoReparto.Cantidad) { var d = item.Cantidad * costeUnidad; if (d != null) { costeLineas = (double)d; } } else if (reparto == TipoReparto.Importe) { var d = item.Importe * costeUnidad; if (d != null) { costeLineas = (double)d; } } else if (reparto == TipoReparto.Metros) { var d = item.Metros * costeUnidad; if (d != null) { costeLineas = (double)d; } } else if (reparto == TipoReparto.Peso) { var d = item.Largo * item.Ancho * item.Grueso * costeUnidad; if (d != null) { costeLineas = (double)d; } } costeLineas = Math.Round(costeLineas, item.Decimalesmonedas ?? 2); if (coste == TipoCoste.Material) { item.Costeadicionalmaterial += costeLineas; } else if (coste == TipoCoste.Otros) { item.Costeadicionalotro += costeLineas; } else if (coste == TipoCoste.Portes) { item.Costeadicionalportes += costeLineas; } costeTotal -= costeLineas; } //Esto lo hacemos para asegurarnos de que los costes cuadran con lo que se debe asignar ya que puede haber problemas de redondeos if (costeTotal != 0) { var ultimaLinea = lineas.LastOrDefault(); if (ultimaLinea != null) { costeTotal = Math.Round(costeTotal, ultimaLinea.Decimalesmonedas ?? 2); if (coste == TipoCoste.Material) { ultimaLinea.Costeadicionalmaterial += costeTotal; } else if (coste == TipoCoste.Otros) { ultimaLinea.Costeadicionalotro += costeTotal; } else if (coste == TipoCoste.Portes) { ultimaLinea.Costeadicionalportes += costeTotal; } } } }