private static factura procesaHoja(Worksheet sheet) { int fila = 0; factura o = new factura(); object dato = null; #region Datos Generales dato = sheet.get_Range("G12", "G12").Value2; if (dato != null) { o.Referencia = dato.ToString(); o.PEntInv = EntradaCtrl.InventarioGetCtaContable(o.Referencia); _maxColCuentasCont = o.PEntInv.PLstCteMercCta.Count > _maxColCuentasCont ? o.PEntInv.PLstCteMercCta.Count : _maxColCuentasCont; } #endregion #region Maniobra entrada y salida for (fila = 17; fila <= 19; fila++) { dato = sheet.get_Range("E" + fila.ToString(), "E" + fila.ToString()).Value2; if (dato != null) { o.CapacidadFlete = sheet.get_Range("B" + fila.ToString(), "B" + fila.ToString()).Value2.ToString(); o.ManiobraEntradaSalida = Convert.ToDouble(sheet.get_Range("D" + fila.ToString(), "D" + fila.ToString()).Value2); o.ManiobraEntradaSalidaCantidad = Convert.ToInt32(dato); o.ManiobraEntradaSalidaTotal = Convert.ToDouble(sheet.get_Range("F" + fila.ToString(), "F" + fila.ToString()).Value2); break; } } #endregion #region Etiquetas aduana dato = sheet.get_Range("E23", "E23").Value2; if (dato != null) { o.Piezas19x10 = Convert.ToInt32(dato); o.EtiquetaAduana19x10 = Convert.ToDouble(sheet.get_Range("D23", "D23").Value2); } dato = sheet.get_Range("E27", "E27").Value2; if (dato != null) { o.Piezas10x10 = Convert.ToInt32(dato); o.EtiquetaAduana10x10 = Convert.ToDouble(sheet.get_Range("D27", "D27").Value2); } #endregion #region Transportes //Busca el inicio de la fila que contiene la información del transporte (TRANSPORTES) fila = 30; fila = getFila(fila, "B", "TRANSPORTES", sheet); dato = sheet.get_Range("B" + fila.ToString(), "B" + fila.ToString()).Value2; string tipo = string.Empty; //Los transportes y maniobras se van a diferenciar por la columna que le antecede T transprote, M maniobra object cantidad; while (dato != null) { tipo = sheet.get_Range("A" + fila.ToString(), "A" + fila.ToString()).Value2; cantidad = sheet.get_Range("E" + fila.ToString(), "E" + fila.ToString()).Value2; switch (tipo) { case "T": Transporte t = new Transporte( Convert.ToDouble(sheet.get_Range("F" + fila.ToString(), "F" + fila.ToString()).Value2), Convert.ToInt32(cantidad), Convert.ToDouble(sheet.get_Range("D" + fila.ToString(), "D" + fila.ToString()).Value2.ToString())); o.LstTransporte.Add(t); break; case "M": Maniobra m = new Maniobra( Convert.ToDouble(sheet.get_Range("F" + fila.ToString(), "F" + fila.ToString()).Value2), Convert.ToInt32(cantidad), Convert.ToDouble(sheet.get_Range("D" + fila.ToString(), "D" + fila.ToString()).Value2.ToString())); o.LstManiobra.Add(m); break; default: break; } fila++; dato = sheet.get_Range("B" + fila.ToString(), "B" + fila.ToString()).Value2; } //bool esTransporte = !dato.ToString().StartsWith("Maniobra"); //while (esTransporte) //{ // dato = sheet.get_Range("E" + fila.ToString(), "E" + fila.ToString()).Value2; // if (dato != null) // { // Transporte t = new Transporte( // Convert.ToDouble(sheet.get_Range("F" + fila.ToString(), "F" + fila.ToString()).Value2), // Convert.ToInt32(dato), // getTarifaTransporte(sheet.get_Range("B" + fila.ToString(), "B" + fila.ToString()).Value2.ToString()) // ); // o.LstTransporte.Add(t); // } // fila++; // dato = sheet.get_Range("B" + fila.ToString(), "B" + fila.ToString()).Value2; // esTransporte = !dato.ToString().StartsWith("Maniobra"); //} _maxColTransportes = o.LstTransporte.Count > _maxColTransportes ? o.LstTransporte.Count : _maxColTransportes; #endregion #region Maniobras //bool esManiobra = dato.ToString().StartsWith("Maniobra"); //while (esManiobra) //{ // dato = sheet.get_Range("E" + fila.ToString(), "E" + fila.ToString()).Value2; // if (dato != null) // { // Maniobra m = new Maniobra( // Convert.ToDouble(sheet.get_Range("F" + fila.ToString(), "F" + fila.ToString()).Value2), // Convert.ToInt32(dato), // getTarifaManiobra(sheet.get_Range("B" + fila.ToString(), "B" + fila.ToString()).Value2.ToString()) // ); // o.LstManiobra.Add(m); // } // fila++; // dato = sheet.get_Range("B" + fila.ToString(), "B" + fila.ToString()).Value2; // if (dato != null) // esManiobra = dato.ToString().StartsWith("Maniobra"); // else // esManiobra = false; //} _maxColManiobras = o.LstManiobra.Count > _maxColManiobras ? o.LstManiobra.Count : _maxColManiobras; #endregion #region Otros (Parte 1) dato = sheet.get_Range("D" + fila.ToString(), "D" + fila.ToString()).Value2; if (dato == null) { dato = string.Empty; } while (!dato.ToString().StartsWith("SUBTOTAL")) { dato = sheet.get_Range("E" + fila.ToString(), "E" + fila.ToString()).Value2; if (dato != null) { OtrosServicios os = new OtrosServicios(); os.Cantidad = Convert.ToInt32(dato); os.Valor = Convert.ToDouble(sheet.get_Range("F" + fila.ToString(), "F" + fila.ToString()).Value2); os.Nombre = sheet.get_Range("B" + fila.ToString(), "B" + fila.ToString()).Value2.ToString(); o.LstOtros.Add(os); } fila++; dato = sheet.get_Range("D" + fila.ToString(), "D" + fila.ToString()).Value2; if (dato == null) { dato = string.Empty; } } #endregion #region Tarimas y Emplayado fila = getFila(fila, "B", "OTROS", sheet); dato = sheet.get_Range("E" + fila.ToString(), "E" + fila.ToString()).Value2; if (dato != null) { o.PTarima.Cantidad = Convert.ToInt32(dato); o.PTarima.Valor = Convert.ToDouble(sheet.get_Range("D" + fila.ToString(), "D" + fila.ToString()).Value2); } fila++; dato = sheet.get_Range("E" + fila.ToString(), "E" + fila.ToString()).Value2; if (dato != null) { o.PEmplayado.Cantidad = Convert.ToInt32(dato); o.PEmplayado.Valor = Convert.ToDouble(sheet.get_Range("D" + fila.ToString(), "D" + fila.ToString()).Value2); } #endregion #region #region Otros (Parte 2) fila = getFila(fila, "B", "UVA", sheet); dato = sheet.get_Range("D" + fila.ToString(), "D" + fila.ToString()).Value2; while (!dato.ToString().StartsWith("SUBTOTAL")) { dato = sheet.get_Range("E" + fila.ToString(), "E" + fila.ToString()).Value2; if (dato != null) { OtrosServicios os = new OtrosServicios(); os.Cantidad = Convert.ToInt32(dato); os.Valor = Convert.ToDouble(sheet.get_Range("F" + fila.ToString(), "F" + fila.ToString()).Value2); os.Nombre = sheet.get_Range("B" + fila.ToString(), "B" + fila.ToString()).Value2.ToString(); o.LstOtros.Add(os); } fila++; dato = sheet.get_Range("D" + fila.ToString(), "D" + fila.ToString()).Value2; } #endregion #region Total fila = getFila(fila, "G", "GRAN TOTAL", sheet); fila--; //El método get fila incrementa en una unidad dato = sheet.get_Range("I" + fila.ToString(), "I" + fila.ToString()).Value2; if (dato != null) { o.Total = Convert.ToDouble(dato); } #endregion return(o); }
private static void insertaFila(Worksheet sheet, int fila, factura o) { sheet.Cells[fila, 7] = "MEXICO"; sheet.Cells[fila, 8] = "TRAILER 48 CAJA SECA"; sheet.Cells[fila, 9] = o.ManiobraEntradaSalida.ToString(); sheet.Cells[fila, 10] = o.ManiobraEntradaSalidaCantidad.ToString(); ((Range)sheet.Cells[fila, 11]).FormulaR1C1 = "=RC[-2]*RC[-1]"; //=FC(-2)*FC(-1) #region Etiquetado sheet.Cells[fila, 12] = o.EtiquetaAduana19x10; sheet.Cells[fila, 13] = o.Piezas19x10; sheet.Cells[fila, 14] = o.EtiquetaAduana10x10; sheet.Cells[fila, 15] = o.Piezas10x10; ((Range)sheet.Cells[fila, 16]).FormulaR1C1 = "=(RC[-4]*RC[-3])+(RC[-2]*RC[-1])";//=(FC(-4)*FC(-3))+(FC(-2)*FC(-1)) #endregion sheet.Cells[fila, 17] = o.Referencia; #region Trasnportes int NoCol = 18; int NumParciales = 0; for (; NumParciales < o.LstTransporte.Count; NumParciales++) { Transporte oT = o.LstTransporte[NumParciales]; sheet.Cells[fila, NoCol] = oT.Valor; NoCol++; sheet.Cells[fila, NoCol] = oT.Porcentaje; NoCol++; } int NoVacios = _maxColTransportes - o.LstTransporte.Count; for (NumParciales = 0; NumParciales < NoVacios; NumParciales++) { sheet.Cells[fila, NoCol] = 0; NoCol++; sheet.Cells[fila, NoCol] = 0; NoCol++; } #endregion #region Maniobras NoCol = 18 + _maxColTransportes * 2; NumParciales = 0; for (; NumParciales < o.LstManiobra.Count; NumParciales++) { Maniobra oM = o.LstManiobra[NumParciales]; sheet.Cells[fila, NoCol] = oM.Valor; NoCol++; sheet.Cells[fila, NoCol] = oM.Porcentaje; NoCol++; } NoVacios = _maxColManiobras - o.LstManiobra.Count; for (NumParciales = 0; NumParciales < NoVacios; NumParciales++) { sheet.Cells[fila, NoCol] = 0; NoCol++; sheet.Cells[fila, NoCol] = 0; NoCol++; } #endregion #region Otros sheet.Cells[fila, NoCol] = findOtroServicio(o.LstOtros, "Custodia").Cantidad; NoCol++; sheet.Cells[fila, NoCol] = findOtroServicio(o.LstOtros, "Custodia").Valor; NoCol++; sheet.Cells[fila, NoCol] = findOtroServicio(o.LstOtros, "Viaticos").Valor; NoCol++; sheet.Cells[fila, NoCol] = findOtroServicio(o.LstOtros, "Dictamen").Cantidad; NoCol++; sheet.Cells[fila, NoCol] = findOtroServicio(o.LstOtros, "Dictamen").Valor; NoCol++; ((Range)sheet.Cells[fila, NoCol]).FormulaR1C1 = "=RC[-3]+RC[-1]"; NoCol++; #endregion #region Emplayado sheet.Cells[fila, NoCol] = o.PEmplayado.Valor; NoCol++; sheet.Cells[fila, NoCol] = o.PEmplayado.Cantidad; NoCol++; ((Range)sheet.Cells[fila, NoCol]).FormulaR1C1 = "=RC[-2]*RC[-1]"; NoCol++; #endregion #region NoCuenta StringBuilder sbOC = new StringBuilder(); foreach (Cliente_mercancia_cuenta itemCMC in o.PEntInv.PLstCteMercCta) { sbOC.Append(itemCMC.Orden.Replace(",", "/") + "/"); } sheet.Cells[fila, NoCol] = sbOC.ToString().Substring(0, sbOC.ToString().Length - 1); NoCol++; NoVacios = _maxColCuentasCont - o.PEntInv.PLstCteMercCta.Count; NumParciales = 0; for (; NumParciales < o.PEntInv.PLstCteMercCta.Count; NumParciales++) { Cliente_mercancia_cuenta oCMC = o.PEntInv.PLstCteMercCta[NumParciales]; sheet.Cells[fila, NoCol] = oCMC.Cuenta; NoCol++; } NoCol += NoVacios; #endregion #region Sumatoria string formulaSumatoria = "=RC[-" + (2 + _maxColCuentasCont).ToString() + "]+RC[-" + (5 + _maxColCuentasCont).ToString() + "]+RC[-" + (9 + _maxColCuentasCont).ToString() + "]"; int sigCol = 12 + _maxColCuentasCont; for (int iS = 1; iS <= _maxColManiobras; iS++) { formulaSumatoria += "+RC[-" + sigCol.ToString() + "]"; sigCol += 2; } for (int iS = 1; iS <= _maxColTransportes; iS++) { formulaSumatoria += "+RC[-" + sigCol.ToString() + "]"; sigCol += 2; } formulaSumatoria += "+RC[-" + sigCol.ToString() + "]"; sigCol += 5; formulaSumatoria += "+RC[-" + sigCol.ToString() + "]"; ((Range)sheet.Cells[fila, NoCol]).FormulaR1C1 = formulaSumatoria; #endregion #region Iva y Total NoCol++; ((Range)sheet.Cells[fila, NoCol]).FormulaR1C1 = "=RC[-1]*.16"; NoCol++; ((Range)sheet.Cells[fila, NoCol]).FormulaR1C1 = "=RC[-1]+RC[-2]"; #endregion }