public async Task <CostoDto> ObtenerCostoPorIdPrendaClasificacion(int idPrendaClasificacion)
 {
     return(await _clasificacionPrendasAccesoBd.ObtenerCostoPorIdPrendaClasificacion(idPrendaClasificacion));
 }
        /// <summary>
        /// Condiciones de negocio:
        /// 1)
        /// </summary>
        /// <param name="idSolicitud"></param>
        /// <returns></returns>
        public async Task <GuardarFacturaDto> GenerarFacturaDesdeSolicitud(int idSolicitud)
        {
            var solicitud = await _solicitudAccesoBd.ObtenerSolicitudConDetallePorId(idSolicitud);

            if (solicitud != default(SolicitudesConDetallesDto))
            {
                double totalParcial    = 0;
                double totalGlobal     = 0;
                double totalDoblado    = 0;
                double totalSuplemento = 0;

                var listaDetallesFactura = new List <DetallesFacturaDto>();

                foreach (var detalleSolicitud in solicitud.ListadoDetallesSolicitud.DetalleSolicitud)
                {
                    var costo = await _clasificacionPrendasAccesoBd.ObtenerCostoPorIdPrendaClasificacion(detalleSolicitud.PrendasClasificacionId);

                    double lavadoSeco      = 0;
                    double lavadoPlanchado = 0;
                    double planchado       = 0;
                    double doblado         = 0;

                    if (detalleSolicitud.LavadoSeco)
                    {
                        totalParcial += (costo.LavadoSeco * detalleSolicitud.CantidadPrendas);
                        lavadoSeco    = costo.LavadoSeco * detalleSolicitud.CantidadPrendas;
                    }
                    if (detalleSolicitud.LavadoPlanchado)
                    {
                        totalParcial   += (costo.LavadoPlanchado * detalleSolicitud.CantidadPrendas);
                        lavadoPlanchado = (costo.LavadoPlanchado * detalleSolicitud.CantidadPrendas);
                    }
                    if (detalleSolicitud.Planchado)
                    {
                        totalParcial += (costo.Planchado * detalleSolicitud.CantidadPrendas);
                        planchado     = (costo.Planchado * detalleSolicitud.CantidadPrendas);
                    }

                    if (detalleSolicitud.Doblado)
                    {
                        totalParcial += (costo.Doblado * detalleSolicitud.CantidadPrendas);
                        totalDoblado += (costo.Doblado * detalleSolicitud.CantidadPrendas);
                        doblado       = (costo.Doblado * detalleSolicitud.CantidadPrendas);
                    }

                    totalGlobal = totalParcial;

                    var detalleFactura = new DetallesFacturaDto
                    {
                        DetalleSolicitudId = detalleSolicitud.Id,
                        Doblado            = doblado,
                        LavadoPlanchado    = lavadoPlanchado,
                        LavadoSeco         = lavadoSeco,
                        Planchado          = planchado,
                        Total = (doblado + lavadoPlanchado + lavadoSeco + planchado)
                    };
                    listaDetallesFactura.Add(detalleFactura);
                }
                var listadoDetallesFactura = new ListadoDetallesFacturaDto
                {
                    DetallesFactura = listaDetallesFactura
                };

                if (solicitud.SuplementoEntrega)
                {
                    totalSuplemento = totalGlobal * 0.5;
                    totalGlobal     = totalGlobal + totalSuplemento;
                }

                var guardarFactura = new GuardarFacturaDto
                {
                    ClientesId       = solicitud.ClienteId,
                    Doblado          = totalDoblado,
                    Estado           = "Facturado",
                    SolicitudesId    = solicitud.Id,
                    TotalGlobal      = totalGlobal,
                    TotalParcial     = totalParcial,
                    Suplemento       = totalSuplemento,
                    DetallesFacturas = listadoDetallesFactura
                };

                await _facturaAccesoBd.GuardarFactura(guardarFactura);

                return(await Task.FromResult(guardarFactura));
            }
            return(default(GuardarFacturaDto));
        }