/// <summary> /// Guarda los costos de los movimientos /// </summary> /// <param name="distribucionDeIngredientes"></param> /// <param name="almacenMovimientoID"></param> /// <param name="distribucionorganizaciones"></param> /// <returns></returns> internal bool GuardarCosto(DistribucionDeIngredientesInfo distribucionDeIngredientes, long almacenMovimientoID, DistribucionDeIngredientesOrganizacionInfo distribucionorganizaciones) { bool regreso = true; try { var cuentaSAPBL = new CuentaSAPBL(); IList <CuentaSAPInfo> cuentasSAP = cuentaSAPBL.ObtenerTodos(EstatusEnum.Activo); var almacenMovimientoCostoBl = new AlmacenMovimientoCostoBL(); if (almacenMovimientoID > 0) { //Se obtiene el porcentaje a cobrar cargar por organizacion decimal porcentajeSurtido = distribucionDeIngredientes.CantidadTotal > 0 ? (decimal)distribucionorganizaciones.CantidadSurtir / (decimal)distribucionDeIngredientes.CantidadTotal : 0; foreach (var costoDistribucion in distribucionDeIngredientes.ListaPremezclaDistribucionCosto) { var almacenMovimientoCosto = new AlmacenMovimientoCostoInfo { AlmacenMovimientoId = almacenMovimientoID, Iva = costoDistribucion.Iva, Retencion = costoDistribucion.Retencion, CostoId = costoDistribucion.Costo.CostoID, Importe = costoDistribucion.Importe * porcentajeSurtido, UsuarioCreacionId = costoDistribucion.UsuarioCreacionID }; if (costoDistribucion.TieneCuenta) { CuentaSAPInfo cuenta = cuentasSAP.FirstOrDefault( sap => sap.CuentaSAP.Trim().Equals(costoDistribucion.CuentaSAP.CuentaSAP.Trim())); if (cuenta != null) { almacenMovimientoCosto.CuentaSAPID = cuenta.CuentaSAPID; almacenMovimientoCosto.TieneCuenta = costoDistribucion.TieneCuenta; } } else { almacenMovimientoCosto.ProveedorId = costoDistribucion.Proveedor.ProveedorID; } almacenMovimientoCostoBl.Crear(almacenMovimientoCosto); } } } catch (ExcepcionGenerica) { regreso = false; throw; } catch (Exception ex) { regreso = false; Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(regreso); }
/// <summary> /// Guarda la premezcla distribucion /// </summary> /// <param name="distribucionIngredientes"></param> /// <returns></returns> public PremezclaDistribucionInfo GuardarPremezclaDistribucion(DistribucionDeIngredientesInfo distribucionIngredientes) { try { var premezclaDistribucion = new PremezclaDistribucionBL(); return(premezclaDistribucion.GuardarPremezclaDistribucion(distribucionIngredientes)); } catch (ExcepcionServicio ex) { Logger.Error(ex); throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
internal List <PremezclaDistribucionCostoInfo> GuardarPremezclaDistribucionCosto(DistribucionDeIngredientesInfo distribucionIngredientes) { Logger.Info(); var premezcla = new List <PremezclaDistribucionCostoInfo>(); try { Dictionary <string, object> parametros = AuxPremezclaDistribucionCostoDAL.ObtenerParametrosGuardarPremezclaDistribucionCosto(distribucionIngredientes); DataSet ds = Retrieve("PremezclaDistribucionCosto_Crear", parametros); if (ValidateDataSet(ds)) { premezcla = MapPremezclaDistribucionCostoDAL.ObtenerPremezclaDistribucionCosto(ds); } } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(premezcla); }
private IList <PolizaInfo> ObtenerPoliza(DistribucionDeIngredientesInfo distribucionIngredientes) { var polizaPremezcla = new List <PolizaInfo>(); IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); IList <UnidadMedicionInfo> unidadesMedicion = ObtenerUnidadesMedicion(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.PolizaPremezcla.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.PolizaPremezcla)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; var renglon = 0; int milisegundo = DateTime.Now.Millisecond; ProductoInfo producto = distribucionIngredientes.Producto; DateTime fecha = distribucionIngredientes.FechaEntrada; int folio = producto.ProductoId; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append(Convert.ToString(folio).PadLeft(10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(milisegundo); ref3.Append(postFijoRef3); var almacenMovimientoBL = new AlmacenMovimientoBL(); string archivoFolio = ObtenerArchivoFolio(fecha); //string numeroReferencia = ObtenerNumeroReferencia; List <DistribucionDeIngredientesOrganizacionInfo> organizaciones = distribucionIngredientes.ListaOrganizaciones; DistribucionDeIngredientesOrganizacionInfo organizacionDistribucion; ClaseCostoProductoInfo claseCostoProducto; CuentaAlmacenSubFamiliaInfo almacenesSubFamilia; CuentaSAPInfo cuentaSap; PolizaInfo poliza; DatosPolizaInfo datos; bool tieneIva = distribucionIngredientes.Iva == 1; bool costosTienenIva = distribucionIngredientes.ListaPremezclaDistribucionCosto.Any(tieneIVA => tieneIVA.Iva); string unidad = unidadesMedicion.Where(clave => clave.UnidadID == producto.UnidadId).Select(uni => uni.ClaveUnidad). FirstOrDefault(); OrganizacionInfo organizacion = null; decimal totalIva = 0; /* Se calcula el costo extra y se proratea entre las organizaciones*/ decimal costoTotal = 0; decimal costoUnitario = 0; organizaciones = organizaciones.Where(cant => cant.CantidadSurtir > 0 || cant.CantidadNueva > 0).ToList(); int cantidad; string numeroReferencia = string.Empty; for (var indexOrganizaciones = 0; indexOrganizaciones < organizaciones.Count; indexOrganizaciones++) //Polizas por organizacion { organizacionDistribucion = organizaciones[indexOrganizaciones]; AlmacenMovimientoInfo movimientoGenerado = almacenMovimientoBL.ObtenerPorId(organizacionDistribucion.AlmaceMovimiento.AlmacenMovimientoID); numeroReferencia = ObtenerNumeroReferenciaFolio(movimientoGenerado.FolioMovimiento); cuentaSap = null; if (organizacionDistribucion.Lote.AlmacenInventario.Almacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() || organizacionDistribucion.Lote.AlmacenInventario.Almacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode()) { IList <CuentaAlmacenSubFamiliaInfo> cuentasAlmacenSubFamilia = ObtenerCostosSubFamilia(organizacionDistribucion.Lote.AlmacenInventario.Almacen.AlmacenID); almacenesSubFamilia = cuentasAlmacenSubFamilia.FirstOrDefault(sub => sub.SubFamiliaID == producto.SubfamiliaId); if (almacenesSubFamilia != null) { cuentaSap = cuentasSap.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenesSubFamilia.CuentaSAPID); } } else { IList <ClaseCostoProductoInfo> claseCostosProductos = ObtenerCostosProducto(organizacionDistribucion.Lote.AlmacenInventario.Almacen.AlmacenID); claseCostoProducto = claseCostosProductos.FirstOrDefault(prod => prod.ProductoID == producto.ProductoId); if (claseCostoProducto != null) { cuentaSap = cuentasSap.FirstOrDefault(clave => clave.CuentaSAPID == claseCostoProducto.CuentaSAPID); } } if (cuentaSap == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO HAY CONFIGURACION PARA EL PRODUCTO", producto.Descripcion)); } organizacion = ObtenerOrganizacionIVA(organizacionDistribucion.Organizacion.OrganizacionID); cantidad = organizacionDistribucion.CantidadSurtir; if (cantidad == 0) { cantidad = organizacionDistribucion.CantidadNueva; } if (distribucionIngredientes.ListaOrganizaciones.Any()) { costoTotal = distribucionIngredientes.ListaPremezclaDistribucionCosto.Sum(c => c.Importe); costoUnitario = costoTotal / distribucionIngredientes.CantidadTotal; } //Polizas de Cargo por Organizacion datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", (organizacionDistribucion.CostoTotal + (costoUnitario * organizacionDistribucion.CantidadSurtir)).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(++renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSap.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaSap.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, cantidad.ToString("F0"), unidad, producto.Descripcion, (organizacionDistribucion.CostoTotal).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); //Si el cabecero tiene IVA o los costos tienen iva, crea una linea de iva por organizacion en la poliza if (tieneIva || costosTienenIva) { decimal importeIva = tieneIva? organizacionDistribucion.CostoTotal * (organizacion.Iva.TasaIva / 100):0; totalIva += importeIva; CuentaSAPInfo cuentaIva = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(organizacion.Iva.CuentaRecuperar.ClaveCuenta)); if (cuentaIva == null) { throw new ExcepcionServicio( string.Format("CUENTA DE IVA NO CONFIGURADA PARA LA ORGANIZACION {0}", organizacion.Descripcion)); } decimal porcientoOrg = (decimal)organizacionDistribucion.CantidadSurtir / (decimal)distribucionIngredientes.CantidadTotal; var totalCostosIva = costosTienenIva? distribucionIngredientes.ListaPremezclaDistribucionCosto.Where(iva => iva.Iva).Sum(sumIva => sumIva.Importe * (organizacion.Iva.TasaIva / 100)):0; decimal porcientoIva = totalCostosIva * porcientoOrg; var totalImporteCostosIva = costosTienenIva ? distribucionIngredientes.ListaPremezclaDistribucionCosto.Where(iva => iva.Iva) .Sum(sumIva => sumIva.Importe) : 0; var porcentajeImporteCostosIva = costosTienenIva ? totalImporteCostosIva * porcientoOrg : 0; //Poliza de Iva de importe + Iva de costos var importeIVA = costosTienenIva && tieneIva ? (organizacionDistribucion.CostoTotal + porcentajeImporteCostosIva) : (costosTienenIva && !tieneIva) ? porcentajeImporteCostosIva : (!costosTienenIva && tieneIva) ? organizacionDistribucion.CostoTotal : 0; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", (importeIva + porcientoIva).ToString("F2")), IndicadorImpuesto = organizacion.Iva.IndicadorIvaRecuperar, Renglon = Convert.ToString(++renglon), ImporteIva = (importeIVA).ToString("F2"), Ref3 = ref3.ToString(), Cuenta = cuentaIva.CuentaSAP, ClaveImpuesto = ClaveImpuesto, CondicionImpuesto = CondicionImpuesto, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaIva.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, cantidad.ToString("F0"), unidad, producto.Descripcion, (organizacionDistribucion.CostoTotal).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); //Poliza de Costo de la distribucion por organizacion mas IVA pagada al proveedor datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", ((importeIva + organizacionDistribucion.CostoTotal) * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(++renglon), ImporteIva = String.Empty, Ref3 = ref3.ToString(), ClaveProveedor = distribucionIngredientes.Proveedor.CodigoSAP, ClaveImpuesto = ClaveImpuesto, CondicionImpuesto = CondicionImpuesto, ArchivoFolio = archivoFolio, DescripcionCosto = distribucionIngredientes.Proveedor.CodigoSAP, PesoOrigen = Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, cantidad.ToString("F0"), unidad, producto.Descripcion, (organizacionDistribucion.CostoTotal).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } IList <int> costosConRetencion = distribucionIngredientes.ListaPremezclaDistribucionCosto.Where(x => x.Retencion) .Select(x => x.Costo.CostoID) .ToList(); foreach (var costo in distribucionIngredientes.ListaPremezclaDistribucionCosto) { if (costo.Retencion) { var retencionBL = new RetencionBL(); var retenciones = retencionBL.ObtenerRetencionesConCosto(costosConRetencion); RetencionInfo retencion = null; if (retenciones != null && retenciones.Any()) { retencion = retenciones.FirstOrDefault( costoRet => costoRet.CostoID == costo.Costo.CostoID); } if (retencion != null) { if (!costo.Iva) { renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia.ToString(), FechaEntrada = distribucionIngredientes.FechaEntrada, Folio = numeroReferencia, Division = organizacion.Division, ClaveProveedor = costo.Proveedor.CodigoSAP, Importe = string.Format("{0}", (costo.Importe * -1).ToString("F2")), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = costo.Proveedor.Descripcion, PesoOrigen = organizacionDistribucion.CantidadSurtir, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, organizacionDistribucion.CantidadExistente.ToString("N0"), unidad, costo.Costo.Descripcion, costoUnitario.ToString("N2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } var parametrosRetencion = new StringBuilder(); parametrosRetencion.Append(String.Format("{0}{1}" , retencion.IndicadorRetencion , retencion.TipoRetencion)); datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia.ToString(), FechaEntrada = distribucionIngredientes.FechaEntrada, Folio = numeroReferencia, Division = organizacion.Division, ClaveProveedor = costo.Proveedor.CodigoSAP, Importe = string.Format("-{0}", "0"), IndicadorImpuesto = parametrosRetencion.ToString(), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), CodigoRetencion = retencion.IndicadorImpuesto, TipoRetencion = retencion.IndicadorRetencion, ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = costo.Proveedor.Descripcion, PesoOrigen = organizacionDistribucion.CantidadSurtir, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, organizacionDistribucion.CantidadExistente.ToString("N0"), unidad, costo.Costo.Descripcion, costoUnitario.ToString("N2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } } decimal porcientoOrg = (decimal)organizacionDistribucion.CantidadSurtir / (decimal)distribucionIngredientes.CantidadTotal; var importePorciento = costo.Iva ? (costo.Importe * ((organizacion.Iva.TasaIva / 100) + 1)) * porcientoOrg : costo.Importe * porcientoOrg; var descripcion = costo.TieneCuenta ? costo.CuentaSAP.Descripcion : costo.Proveedor.Descripcion; var cuenta = costo.TieneCuenta ? costo.CuentaSAP.CuentaSAP : costo.Proveedor.CodigoSAP; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", ((importePorciento) * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(++renglon), ImporteIva = String.Empty, Ref3 = ref3.ToString(), Cuenta = String.Empty, ClaveProveedor = String.Empty, ClaveImpuesto = ClaveImpuesto, CondicionImpuesto = CondicionImpuesto, ArchivoFolio = archivoFolio, DescripcionCosto = descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, cantidad.ToString("F0"), unidad, descripcion, (organizacionDistribucion.CostoTotal).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; if (costo.TieneCuenta) { datos.Cuenta = cuenta; } else { datos.ClaveProveedor = cuenta; } poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } } if (!tieneIva && !costosTienenIva) { decimal importe = organizaciones.Sum(imp => imp.CostoTotal) + totalIva; decimal peso = organizaciones.Sum(kg => kg.CantidadSurtir); if (peso == 0) { peso = organizaciones.Sum(kg => kg.CantidadNueva); } bool esCuenta = false; var proveedor = distribucionIngredientes.Proveedor.CodigoSAP; if (!proveedor.StartsWith("0")) { esCuenta = true; } //numeroReferencia = ObtenerNumeroReferencia; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", (distribucionIngredientes.CostoTotal * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(++renglon), ImporteIva = "0", Ref3 = ref3.ToString(), ClaveProveedor = esCuenta ? String.Empty : distribucionIngredientes.Proveedor.CodigoSAP, Cuenta = esCuenta ? distribucionIngredientes.Proveedor.CodigoSAP : String.Empty, ArchivoFolio = archivoFolio, DescripcionCosto = distribucionIngredientes.Proveedor.Descripcion, PesoOrigen = Math.Round(peso, 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, (peso).ToString("F0"), unidad, producto.Descripcion, (importe).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } return(polizaPremezcla); }
internal PremezclaDistribucionInfo GuardarPremezclaDistribucion(DistribucionDeIngredientesInfo distribucionIngredientes) { PremezclaDistribucionInfo distribucion = null; try { var almacenMovimientoBl = new AlmacenMovimientoBL(); var almacenInventarioLoteBl = new AlmacenInventarioLoteBL(); var almacenInventarioBl = new AlmacenInventarioBL(); var almacenMovimientoDetalleBl = new AlmacenMovimientoDetalleBL(); var premezclaDistribucionDal = new PremezclaDistribucionDAL(); var premezclaDistribucionDetalleDal = new PremezclaDistribucionDetalleDAL(); var premezclaDistribucionCostoDal = new PremezclaDistribucionCostoDAL(); long almacenMovimientoId = 0; // Afectamos el inventario. using (var transaction = new TransactionScope()) { distribucion = premezclaDistribucionDal.GuardarPremezclaDistribucion(new PremezclaDistribucionInfo { ProveedorId = distribucionIngredientes.Proveedor.ProveedorID, Iva = distribucionIngredientes.Iva, ProductoId = distribucionIngredientes.Producto.ProductoId, CantidadExistente = distribucionIngredientes.CantidadTotal, CostoUnitario = distribucionIngredientes.CostoUnitario, UsuarioCreacionId = distribucionIngredientes.UsuarioId, }); distribucionIngredientes.PremezclaDistribucionID = distribucion.PremezclaDistribucionId; distribucion.ListaPremezclaDistribucionCosto = premezclaDistribucionCostoDal.GuardarPremezclaDistribucionCosto(distribucionIngredientes); /* Se calcula el costo extra y se proratea entre las organizaciones*/ //decimal costoDeCostosPorOrganizacion = 0; decimal importeCostoTotal = 0; if (distribucionIngredientes.ListaOrganizaciones.Any()) { importeCostoTotal = distribucionIngredientes.ListaPremezclaDistribucionCosto.Sum(c => c.Importe); } foreach (var distribucionorganizaciones in distribucionIngredientes.ListaOrganizaciones) { decimal porcentajeSurtido = distribucionIngredientes.CantidadTotal > 0 ? (decimal)distribucionorganizaciones.CantidadSurtir / (decimal)distribucionIngredientes.CantidadTotal : 0; if (distribucionorganizaciones.Lote.AlmacenInventarioLoteId != 0) { // Se Genera un movimiento de almacen ////Insertar en almacenmovimiento var almacenMovimientoInfo = new AlmacenMovimientoInfo { ProveedorId = distribucionIngredientes.Proveedor.ProveedorID, AlmacenID = distribucionorganizaciones.Lote.AlmacenInventario.Almacen.AlmacenID, TipoMovimientoID = TipoMovimiento.EntradaAlmacen.GetHashCode(), Observaciones = "", Status = Estatus.AplicadoInv.GetHashCode(), UsuarioCreacionID = distribucionIngredientes.UsuarioId }; almacenMovimientoId = almacenMovimientoBl.Crear(almacenMovimientoInfo); //Se crea el Almacen Movimiento Costo GuardarCosto(distribucionIngredientes, almacenMovimientoId, distribucionorganizaciones); // Se modifica el Almacen Inventario distribucionorganizaciones.Lote.AlmacenInventario.Cantidad = distribucionorganizaciones.Lote.AlmacenInventario.Cantidad + distribucionorganizaciones.CantidadSurtir; distribucionorganizaciones.Lote.AlmacenInventario.Importe = distribucionorganizaciones.Lote.AlmacenInventario.Importe + distribucionorganizaciones.CostoTotal + (importeCostoTotal * porcentajeSurtido); distribucionorganizaciones.Lote.AlmacenInventario.PrecioPromedio = distribucionorganizaciones.Lote.AlmacenInventario.Importe / distribucionorganizaciones.Lote.AlmacenInventario.Cantidad; distribucionorganizaciones.Lote.AlmacenInventario.UsuarioModificacionID = distribucionIngredientes.UsuarioId; almacenInventarioBl.Actualizar(distribucionorganizaciones.Lote.AlmacenInventario); // Se modifica el Almacen Inventario Lote distribucionorganizaciones.Lote.Cantidad = distribucionorganizaciones.Lote.Cantidad + distribucionorganizaciones.CantidadSurtir; distribucionorganizaciones.Lote.Importe = distribucionorganizaciones.Lote.Importe + distribucionorganizaciones.CostoTotal + (importeCostoTotal * porcentajeSurtido); distribucionorganizaciones.Lote.PrecioPromedio = distribucionorganizaciones.Lote.Importe / distribucionorganizaciones.Lote.Cantidad; distribucionorganizaciones.Lote.UsuarioModificacionId = distribucionIngredientes.UsuarioId; almacenInventarioLoteBl.Actualizar(distribucionorganizaciones.Lote); // Se genera el Almacen Movimiento Detalle almacenMovimientoDetalleBl.Crear(new AlmacenMovimientoDetalle { AlmacenMovimientoID = almacenMovimientoId, AlmacenInventarioLoteId = distribucionorganizaciones.Lote.AlmacenInventarioLoteId, Piezas = 0, ProductoID = distribucionorganizaciones.Lote.AlmacenInventario.ProductoID, Precio = distribucionorganizaciones.CostoUnitario, Cantidad = distribucionorganizaciones.CantidadSurtir, Importe = distribucionorganizaciones.CostoTotal, UsuarioCreacionID = distribucionIngredientes.UsuarioId, FechaCreacion = DateTime.Now }); var premezclaDistribucionDetalle = premezclaDistribucionDetalleDal.GuardarPremezclaDistribucionDetalle(new PremezclaDistribucionDetalleInfo { AlmacenMovimientoId = almacenMovimientoId, PremezclaDistribucionId = distribucion.PremezclaDistribucionId, CantidadASurtir = distribucionorganizaciones.CantidadSurtir, OrganizacionId = distribucionorganizaciones.Organizacion.OrganizacionID, UsuarioCreacionId = distribucionIngredientes.UsuarioId }); distribucion.ListaPremezclaDistribucionDetalle.Add(premezclaDistribucionDetalle); foreach (var distribucionOrg in distribucionIngredientes .ListaOrganizaciones.Where(distribucionOrg => distribucionOrg.Organizacion.OrganizacionID == premezclaDistribucionDetalle.OrganizacionId)) { distribucionOrg.AlmaceMovimiento = new AlmacenMovimientoInfo { AlmacenMovimientoID = premezclaDistribucionDetalle.AlmacenMovimientoId }; } } } #region POLIZA distribucionIngredientes.AlmaceMovimientoID = almacenMovimientoId; var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.PolizaPremezcla); distribucionIngredientes.FechaEntrada = DateTime.Now; IList <PolizaInfo> polizas = poliza.GeneraPoliza(distribucionIngredientes); if (polizas != null && polizas.Any()) { var polizaBL = new PolizaBL(); int organizacionID = distribucionIngredientes.ListaOrganizaciones[0].Organizacion.OrganizacionID; int usuarioCreacionID = distribucionIngredientes.UsuarioId; polizas.ToList().ForEach(datos => { datos.OrganizacionID = organizacionID; datos.UsuarioCreacionID = usuarioCreacionID; datos.ArchivoEnviadoServidor = 1; }); polizaBL.GuardarServicioPI(polizas, TipoPoliza.PolizaPremezcla); } #endregion POLIZA transaction.Complete(); } return(distribucion); } catch (ExcepcionServicio ex) { Logger.Error(ex); throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
internal static Dictionary <string, object> ObtenerParametrosGuardarPremezclaDistribucionCosto(DistribucionDeIngredientesInfo distribucionIngredientes) { try { Logger.Info(); var xml = new XElement("ROOT", from info in distribucionIngredientes.ListaPremezclaDistribucionCosto select new XElement("PremezclaDistribucionCosto", new XElement("PremezclaDistribucionID", distribucionIngredientes.PremezclaDistribucionID), new XElement("Costo", info.Costo.CostoID), new XElement("TieneCuenta", info.TieneCuenta), new XElement("Proveedor", info.Proveedor.ProveedorID), new XElement("CuentaProvision", info.CuentaSAP.CuentaSAP), new XElement("Importe", info.Importe), new XElement("Iva", info.Iva), new XElement("Retencion", info.Retencion), new XElement("Activo", info.Activo.GetHashCode()), new XElement("UsuarioCreacionID", info.UsuarioCreacionID), new XElement("UsuarioModificacionID", info.UsuarioModificacionID) )); var parametros = new Dictionary <string, object> { { "@PremezclaDistribucionCostoXML", xml.ToString() } }; return(parametros); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene una lista de distribucion de ingredientes /// </summary> /// <param name="reader"></param> /// <returns></returns> internal static List <DistribucionDeIngredientesInfo> ObtenerPremezclaDistribucionConciliacion(IDataReader reader) { try { Logger.Info(); var distribuciones = new List <DistribucionDeIngredientesInfo>(); DistribucionDeIngredientesInfo distribucion; while (reader.Read()) { distribucion = new DistribucionDeIngredientesInfo { Producto = new ProductoInfo { ProductoId = Convert.ToInt32(reader["ProductoID"]), Descripcion = Convert.ToString(reader["Producto"]), UnidadId = Convert.ToInt32(reader["UnidadID"]), SubfamiliaId = Convert.ToInt32(reader["SubFamiliaID"]) }, Iva = Convert.ToInt32(reader["IVA"]), CantidadExistente = Convert.ToInt32(reader["CantidadExistente"]), CostoUnitario = Convert.ToInt32(reader["CostoUnitario"]), PremezclaDistribucionID = Convert.ToInt32(reader["PremezclaDistribucionID"]), FechaEntrada = Convert.ToDateTime(reader["FechaEntrada"]), AlmaceMovimientoID = Convert.ToInt64(reader["AlmacenMovimientoID"]), Proveedor = new ProveedorInfo { ProveedorID = Convert.ToInt32(reader["ProveedorID"]), Descripcion = Convert.ToString(reader["Proveedor"]), CodigoSAP = Convert.ToString(reader["CodigoSAP"]) } }; distribuciones.Add(distribucion); } reader.NextResult(); var distribucionIngredientesOrganizaciones = new List <DistribucionDeIngredientesOrganizacionInfo>(); DistribucionDeIngredientesOrganizacionInfo distribucionIngredienteOrganizacion; while (reader.Read()) { distribucionIngredienteOrganizacion = new DistribucionDeIngredientesOrganizacionInfo { Lote = new AlmacenInventarioLoteInfo { Lote = Convert.ToInt32(reader["Lote"]), AlmacenInventario = new AlmacenInventarioInfo { Almacen = new AlmacenInfo { AlmacenID = Convert.ToInt32(reader["AlmacenID"]) } } }, Organizacion = new OrganizacionInfo { OrganizacionID = Convert.ToInt32(reader["OrganizacionID"]) }, CantidadSurtir = Convert.ToInt32(reader["CantidadASurtir"]), CantidadNueva = Convert.ToInt32(reader["CantidadASurtir"]), PremezclaDistribucionID = Convert.ToInt32(reader["PremezclaDistribucionID"]), }; distribucionIngredientesOrganizaciones.Add(distribucionIngredienteOrganizacion); } distribuciones.ForEach(datos => { datos.ListaOrganizaciones = distribucionIngredientesOrganizaciones.Where( id => id.PremezclaDistribucionID == datos.PremezclaDistribucionID) .Select(org => new DistribucionDeIngredientesOrganizacionInfo { Lote = org.Lote, Organizacion = org.Organizacion, CantidadSurtir = org.CantidadNueva, PremezclaDistribucionID = org.PremezclaDistribucionID, CostoTotal = org.CantidadNueva * datos.CostoUnitario }).ToList(); }); return(distribuciones); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }