private IList <PolizaInfo> ObtenerPoliza(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso, List <InterfaceSalidaTraspasoCostoInfo> interfaceSalidaTraspasoCosto) { var polizasSalidaTraspaso = new List <PolizaInfo>(); IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault( clave => clave.TipoPolizaID == TipoPoliza.PolizaSacrificioTraspasoGanado.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.PolizaSacrificioTraspasoGanado)); } string textoDocumento = tipoPoliza.TextoDocumento; string postFijoRef3 = tipoPoliza.PostFijoRef3; string prefijoConcepto = tipoPoliza.ClavePoliza; OrganizacionInfo organizacionDestino = ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionDestino.OrganizacionID); OrganizacionInfo organizacionOrigen = ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionId); string divisionOrigen = organizacionOrigen.Division; long folioTraspaso = interfaceSalidaTraspaso.FolioTraspaso; List <LoteInfo> lotes = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Select(lote => lote.Lote).ToList(); var costoBL = new CostoBL(); IList <CostoInfo> costos = costoBL.ObtenerTodos(EstatusEnum.Activo); List <InterfaceSalidaTraspasoCostoInfo> animalesPorLote; int loteID; const string COMPLEMENTO_REF1 = "czas."; const string UNIDAD_MOVIMIENTO = "Kgs."; const string DESCRIPCION_MOVIMIENTO = "CABEZAS"; DateTime fechaEnvio = interfaceSalidaTraspaso.FechaEnvio; ParametroOrganizacionInfo parametroOrganizacion = ObtenerParametroOrganizacionPorClave(organizacionOrigen.OrganizacionID, ParametrosEnum.CTACENTROCOSTOENG.ToString()); for (var indexLotes = 0; indexLotes < lotes.Count; indexLotes++) { Thread.Sleep(999); var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append(Convert.ToString(folioTraspaso).PadLeft(10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); var archivoFolio = new StringBuilder(ObtenerArchivoFolio(fechaEnvio)); //var numeroDocumento = // new StringBuilder(string.Format("{0}{1}", folioTraspaso, ObtenerNumeroReferencia)); var numeroDocumento = ObtenerNumeroReferenciaFolio(folioTraspaso); loteID = lotes[indexLotes].LoteID; animalesPorLote = (from ani in interfaceSalidaTraspasoCosto from movs in interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle where movs.Lote.LoteID == loteID && ani.InterfaceSalidaTraspasoDetalle.InterfaceSalidaTraspasoDetalleID == movs.InterfaceSalidaTraspasoDetalleID orderby ani.InterfaceSalidaTraspasoCostoID, ani.AnimalID select ani).ToList(); var renglon = 1; if (animalesPorLote.Any()) { int cabezas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Where( loteId => loteId.Lote.LoteID == loteID).Select( cabe => cabe.Cabezas).FirstOrDefault(); List <long> animalesAFacturar = ObtenerAnimalesPorFacturar(animalesPorLote, cabezas); animalesPorLote = animalesPorLote.Join(animalesAFacturar, lote => lote.AnimalID, id => id, (lote, id) => lote). ToList(); var interfaceSalidaTraspasoCostoBL = new InterfaceSalidaTraspasoCostoBL(); interfaceSalidaTraspasoCostoBL.ActualizarFacturado(animalesAFacturar); if (animalesPorLote.Any()) { if (animalesPorLote.Any()) { animalesPorLote = animalesPorLote .GroupBy(costoAnimal => costoAnimal.Costo.CostoID) .Select(dinero => new InterfaceSalidaTraspasoCostoInfo { AnimalID = dinero.Select(id => id.AnimalID).FirstOrDefault(), Costo = new CostoInfo { CostoID = dinero.Key }, Importe = dinero.Sum(imp => imp.Importe), }).ToList(); ClaveContableInfo claveContableDestino; ClaveContableInfo claveContableOrigen; CostoInfo costo; CuentaSAPInfo cuentaSapDestino; CuentaSAPInfo cuentaSapOrigen; DatosPolizaInfo datos; PolizaInfo polizaSalida; decimal pesoOrigen = interfaceSalidaTraspaso.PesoBruto - interfaceSalidaTraspaso.PesoTara; InterfaceSalidaTraspasoCostoInfo animalCosto; for (var indexCostos = 0; indexCostos < animalesPorLote.Count; indexCostos++) { animalCosto = animalesPorLote[indexCostos]; costo = costos.FirstOrDefault( id => id.CostoID == animalCosto.Costo.CostoID); claveContableDestino = ObtenerCuentaInventario(costo , organizacionDestino.OrganizacionID , TipoPoliza.SalidaGanado); claveContableOrigen = ObtenerCuentaInventario(costo , organizacionOrigen.OrganizacionID , TipoPoliza. PolizaSacrificioTraspasoGanado); cuentaSapDestino = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(claveContableDestino.Valor)); if (cuentaSapDestino == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE INVENTARIO", claveContableDestino.Valor)); } cuentaSapOrigen = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(claveContableOrigen.Valor)); if (cuentaSapOrigen == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE TRANSITO", claveContableOrigen.Valor)); } datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaEnvio, Folio = folioTraspaso.ToString(), CabezasRecibidas = cabezas.ToString(), NumeroDocumento = folioTraspaso.ToString(), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? (animalCosto.Importe * -1).ToString("F2") : animalCosto.Importe.ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon++), Cabezas = Convert.ToString(cabezas), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = cuentaSapOrigen.Descripcion, Cuenta = cuentaSapOrigen.CuentaSAP, CentroCosto = cuentaSapOrigen.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto) ? parametroOrganizacion.Valor : string.Empty, PesoOrigen = pesoOrigen, Division = divisionOrigen, ComplementoRef1 = COMPLEMENTO_REF1, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto, folioTraspaso, cabezas, DESCRIPCION_MOVIMIENTO, pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO), Sociedad = organizacionDestino.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaEnvio, Folio = folioTraspaso.ToString(), CabezasRecibidas = cabezas.ToString(), NumeroDocumento = folioTraspaso.ToString(), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? animalCosto.Importe.ToString("F2") : (animalCosto.Importe * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon++), Cabezas = Convert.ToString(cabezas), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = cuentaSapDestino.Descripcion, Cuenta = cuentaSapDestino.CuentaSAP, PesoOrigen = pesoOrigen, Division = divisionOrigen, ComplementoRef1 = COMPLEMENTO_REF1, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto, folioTraspaso, cabezas, DESCRIPCION_MOVIMIENTO, pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO), Sociedad = organizacionDestino.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); } } } } } return(polizasSalidaTraspaso); }