/// <summary>
        /// Cancela un flete
        /// </summary>
        /// <param name="fleteInternoInfo"></param>
        /// <param name="usuarioId"></param>
        internal void CancelarFlete(FleteInternoInfo fleteInternoInfo, int usuarioId)
        {
            try
            {
                var fleteInternoBl        = new FleteInternoBL();
                var fleteInternoDetalleBl = new FleteInternoDetalleBL();
                var fleteInternoCostoBl   = new FleteInternoCostoBL();
                using (var transaction = new TransactionScope())
                {
                    fleteInternoInfo.Activo = EstatusEnum.Inactivo;
                    fleteInternoInfo.UsuarioModificacionId = usuarioId;
                    fleteInternoBl.ActualizarEstado(fleteInternoInfo);
                    fleteInternoInfo.Activo = EstatusEnum.Activo;

                    var listaFleteInternoDetalle = fleteInternoDetalleBl.ObtenerPorFleteInternoId(fleteInternoInfo);
                    //Desactivar detalles
                    if (listaFleteInternoDetalle != null)
                    {
                        foreach (var fleteInternoDetalleInfo in listaFleteInternoDetalle)
                        {
                            fleteInternoDetalleInfo.Activo = EstatusEnum.Inactivo;
                            fleteInternoDetalleInfo.UsuarioModificacionId = usuarioId;
                            fleteInternoDetalleBl.Actualizar(fleteInternoDetalleInfo);
                            fleteInternoDetalleInfo.Activo = EstatusEnum.Activo;

                            var listaFleteInternoCosto =
                                fleteInternoCostoBl.ObtenerPorFleteInternoDetalleId(fleteInternoDetalleInfo);
                            foreach (var fleteInternoCosto in listaFleteInternoCosto)
                            {
                                fleteInternoCosto.Activo = EstatusEnum.Inactivo;
                                fleteInternoCosto.UsuarioModificacionId = usuarioId;
                            }
                            fleteInternoCostoBl.Actualizar(listaFleteInternoCosto);
                        }
                    }
                    transaction.Complete();
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
        /// <summary>
        /// Hace el guardado de la premezcla
        /// </summary>
        internal void Guardar(FleteInternoInfo fleteInternoInfo, int usuarioId)
        {
            try
            {
                var fleteInternoBl                    = new FleteInternoBL();
                var fleteInternoDetalleBl             = new FleteInternoDetalleBL();
                var fleteInternoCostoBl               = new FleteInternoCostoBL();
                var listaFleteInternoCostoAgregados   = new List <FleteInternoCostoInfo>();
                var listaFleteInternoCostoModificados = new List <FleteInternoCostoInfo>();
                var listaFleteInternoCostoEliminados  = new List <FleteInternoCostoInfo>();
                using (var transaction = new TransactionScope())
                {
                    var fleteInternoId = 0;
                    //Si el flete es nuevo se crea
                    if (!fleteInternoInfo.Guardado)
                    {
                        fleteInternoInfo.UsuarioCreacionId = usuarioId;
                        fleteInternoId = fleteInternoBl.Crear(fleteInternoInfo);
                    }
                    else
                    {
                        fleteInternoId = fleteInternoInfo.FleteInternoId;
                    }

                    //Procesar cada detalle
                    foreach (var fleteInternoDetalleP in fleteInternoInfo.ListadoFleteInternoDetalle)
                    {
                        var fleteInternoDetalleId = 0;
                        if (!fleteInternoDetalleP.Guardado)
                        {
                            fleteInternoDetalleP.FleteInternoId    = fleteInternoId;
                            fleteInternoDetalleP.UsuarioCreacionId = usuarioId;
                            fleteInternoDetalleId = fleteInternoDetalleBl.Crear(fleteInternoDetalleP);
                        }
                        else
                        {
                            if (fleteInternoDetalleP.Modificado)
                            {
                                //Actualizar flete interno detalle
                                fleteInternoDetalleBl.Actualizar(fleteInternoDetalleP);
                            }
                            else
                            {
                                if (fleteInternoDetalleP.Eliminado)
                                {
                                    //Actualizar activo a 0
                                    fleteInternoDetalleBl.Actualizar(fleteInternoDetalleP);
                                    foreach (var fleteInternoCostoInfo in fleteInternoDetalleP.ListadoFleteInternoCosto)
                                    {
                                        fleteInternoCostoInfo.Activo = EstatusEnum.Inactivo;
                                        fleteInternoCostoInfo.UsuarioModificacionId = usuarioId;
                                    }
                                    fleteInternoCostoBl.Actualizar(fleteInternoDetalleP.ListadoFleteInternoCosto);
                                }
                            }
                            fleteInternoDetalleId = fleteInternoDetalleP.FleteInternoDetalleId;
                        }

                        //Guardar agregados
                        listaFleteInternoCostoAgregados.Clear();
                        listaFleteInternoCostoAgregados.AddRange(fleteInternoDetalleP.ListadoFleteInternoCosto.Where(fleteInternoCostoInfoP => !fleteInternoCostoInfoP.Guardado));
                        if (listaFleteInternoCostoAgregados.Count > 0)
                        {
                            //Crear flete interno costo
                            foreach (var fleteInternoCostoInfo in listaFleteInternoCostoAgregados)
                            {
                                fleteInternoCostoInfo.Tarifa = Decimal.Round(fleteInternoCostoInfo.Tarifa, 2);// fleteInternoCostoInfo.Tarifa;
                                //
                            }
                            fleteInternoCostoBl.Crear(listaFleteInternoCostoAgregados, new FleteInternoDetalleInfo()
                            {
                                FleteInternoDetalleId = fleteInternoDetalleId
                            });
                        }

                        //Guardar modificados
                        listaFleteInternoCostoModificados.Clear();
                        listaFleteInternoCostoModificados.AddRange(fleteInternoDetalleP.ListadoFleteInternoCosto.Where(fleteInternoCostoInfoP => fleteInternoCostoInfoP.Modificado));
                        if (listaFleteInternoCostoModificados.Count > 0)
                        {
                            //Actualizar flete interno costo
                            foreach (var fleteInternoCostoInfo in listaFleteInternoCostoModificados)
                            {
                                fleteInternoCostoInfo.Tarifa = Decimal.Round(fleteInternoCostoInfo.Tarifa, 2);//fleteInternoCostoInfo.Tarifa / 1000;
                            }
                            fleteInternoCostoBl.Actualizar(listaFleteInternoCostoModificados);
                        }

                        //Guardar eliminados
                        listaFleteInternoCostoEliminados.Clear();
                        listaFleteInternoCostoEliminados.AddRange(fleteInternoDetalleP.ListadoFleteInternoCosto.Where(fleteInternoCostoInfoP => fleteInternoCostoInfoP.Eliminado));
                        if (listaFleteInternoCostoEliminados.Count > 0)
                        {
                            //Actualizar flete interno costo
                            fleteInternoCostoBl.Actualizar(listaFleteInternoCostoEliminados);
                        }
                    }
                    transaction.Complete();
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }