private void FrmHojaDespacho_Load(object sender, EventArgs e) { try { CrystalReports.CrHojaDespacho rpt = new CrystalReports.CrHojaDespacho(); DataSet DS = new DatasetReportes.DsHojaDespacho(); DataTable Usp_GetCabeceraHojaDespacho = new DataTable(); Usp_GetCabeceraHojaDespacho = new CL_HojaDespacho().GetCabeceraHojaDespacho(NumHojaDespacho); DataTable Usp_GetDetalleHojaDespacho = new DataTable(); Usp_GetDetalleHojaDespacho = new CL_HojaDespacho().GetDetalleHojaDespacho(NumHojaDespacho); DS.Tables["Usp_GetCabeceraHojaDespacho"].Merge(Usp_GetCabeceraHojaDespacho); DS.Tables["Usp_GetDetalleHojaDespacho"].Merge(Usp_GetDetalleHojaDespacho); rpt.SetDataSource(DS); //Establecemos los datos al reporte this.CrvHojaDespacho.ReportSource = rpt; //Refrescamos nuestro reporte this.CrvHojaDespacho.RefreshReport(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void BtnMostrar_Click(object sender, EventArgs e) { try { NumHojaDespacho = TxtBuscar.Text; PnlBuscarHojaDespacho.Visible = false; DataTable GetDetalleHojaDespacho = new DataTable(); GetDetalleHojaDespacho = new CL_HojaDespacho().GetDetalleHojaDespacho(TxtBuscar.Text); if (GetDetalleHojaDespacho.Rows.Count > 0) { TdgDetalleHoja.Visible = true; //Tabla para Mostrar Hoja de despacho DetalleHojaDespacho2 = new DataTable(); DetalleHojaDespacho2.TableName = "DetalleHojaDespacho2"; DetalleHojaDespacho2.Columns.Add("Proveedor", typeof(string)); DetalleHojaDespacho2.Columns.Add("NroFactura", typeof(string)); DetalleHojaDespacho2.Columns.Add("NumGuiaRemision", typeof(string)); DetalleHojaDespacho2.Columns.Add("NumGuiaTransportista", typeof(string)); DetalleHojaDespacho2.Columns.Add("Producto", typeof(string)); DetalleHojaDespacho2.Columns.Add("TotalPeso", typeof(decimal)); DetalleHojaDespacho2.Columns.Add("Bultos", typeof(string)); //para detalle hoja despacho para presentar DataRow RowHD2 = DetalleHojaDespacho2.NewRow(); RowHD2["Proveedor"] = ""; RowHD2["NroFactura"] = ""; RowHD2["NumGuiaRemision"] = GetDetalleHojaDespacho.Rows[0]["NumGuiaRemision"]; RowHD2["NumGuiaTransportista"] = GetDetalleHojaDespacho.Rows[0]["NumGuiaTransportista"]; RowHD2["Producto"] = GetDetalleHojaDespacho.Rows[0]["NomProducto"]; RowHD2["TotalPeso"] = GetDetalleHojaDespacho.Rows[0]["TotalPeso"]; RowHD2["Bultos"] = GetDetalleHojaDespacho.Rows[0]["Bultos"]; DetalleHojaDespacho2.Rows.Add(RowHD2); TdgDetalleHoja.SetDataBinding(DetalleHojaDespacho2, "", true); } else { MessageBox.Show("No existe Hoja de despacho con ese codigo", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); PnlBuscarHojaDespacho.Visible = false; TdgDetalleHoja.Visible = false; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void BtnGenerarHojaDespacho_Click(object sender, EventArgs e) { if (DtGuias.Rows.Count > 0) { BtnGenerarHojaDespacho.Visible = false; BtnNuevo.Visible = false; BtnGrabar.Visible = false; BtnBalanza.Visible = false; RbPeso.Visible = false; RbTara.Visible = false; #region inserta hoja de despacho y se obtiene el codigo //Insertar Hoja de despacho E_HojaDespacho ObjHojaDespacho = new E_HojaDespacho(); ObjHojaDespacho.EmpresaID = EmpresaIDUser; ObjHojaDespacho.EmpresaTransporte = EmpresaTransporte; ObjHojaDespacho.NombreChofer = NomTransportista; ObjHojaDespacho.placa = TxtPlaca.Text; ObjHojaDespacho.Carrosa = TxtCarrosa.Text; ObjHojaDespacho.FechaLlegada = Convert.ToDateTime(DeFechaLlegada.Value); ObjHojaDespacho.FechaSalida = Convert.ToDateTime(DeFechaSalida.Value); ObjHojaDespacho.NumJabas = NroJabasTotal; ObjHojaDespacho.PesoTotal = BrutoTotal; ObjHojaDespacho.PesoNeto = NetoTotal; ObjHojaDespacho.TotalAnimales = Cantidad; ObjHojaDespacho.TaraTotal = TaraTotal; ObjHojaDespacho.UsuarioID = AppSettings.UserID; NumHojaDespacho = new CL_HojaDespacho().InsertHojaDespacho(ObjHojaDespacho, AppSettings.SedeID); #endregion #region crear tablas //Tabla para insertar el detalle de la hoja de despacho DataTable DetalleHojaDespacho = new DataTable(); DetalleHojaDespacho.TableName = "DetalleHojaDespacho"; DetalleHojaDespacho.Columns.Add("ProductoID", typeof(string)); DetalleHojaDespacho.Columns.Add("NumHojaDespacho", typeof(string)); DetalleHojaDespacho.Columns.Add("NumGuiaRemision", typeof(string)); DetalleHojaDespacho.Columns.Add("NumRequerimiento", typeof(string)); DetalleHojaDespacho.Columns.Add("NroFactura", typeof(string)); DetalleHojaDespacho.Columns.Add("TotalPeso", typeof(decimal)); DetalleHojaDespacho.Columns.Add("Motivo", typeof(string)); DetalleHojaDespacho.Columns.Add("NumGuiaTransportista", typeof(string)); DetalleHojaDespacho.Columns.Add("Bultos", typeof(string)); DetalleHojaDespacho.Columns.Add("IDProveedor", typeof(int)); #endregion //para detalle hoja despacho foreach (DataRow Row2 in DtGuias.Rows) { DataRow RowHD = DetalleHojaDespacho.NewRow(); RowHD["ProductoID"] = Row2["ProductoID"]; RowHD["NumHojaDespacho"] = NumHojaDespacho; RowHD["NumGuiaRemision"] = Row2["NumGuiaRemision"]; RowHD["NumRequerimiento"] = Row2["NumRequerimiento"]; RowHD["NroFactura"] = Row2["NroFactura"]; RowHD["TotalPeso"] = Row2["TotalPeso"]; RowHD["Motivo"] = Row2["Motivo"]; RowHD["NumGuiaTransportista"] = Row2["NumGuiaTransportista"]; RowHD["Bultos"] = Row2["Bultos"]; RowHD["IDProveedor"] = Row2["IDProveedor"]; DetalleHojaDespacho.Rows.Add(RowHD); } if (DetalleHojaDespacho.Rows.Count > 0) { string xml = new BaseFunctions().GetXML(DetalleHojaDespacho).Replace("NewDataSet", "DocumentElement"); bool Valor; Valor = new CL_HojaDespacho().InsertXMLDetalleHojaDespacho(xml); if (Valor == false) { MessageBox.Show("Ocurrio un error al intentar insertar los detalles de la hoja de despacho", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } //mostrar en reporte Reportes.FrmHojaDespacho ObjFrmHojaD = new Reportes.FrmHojaDespacho(); ObjFrmHojaD.NumHojaDespacho = NumHojaDespacho; ObjFrmHojaD.ShowDialog(); } else { MessageBox.Show("No se ha creado aún alguna guia.", "Hoja de despacho", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }
private void CrearHojaDespacho() { //obtener el distinct de las facturas para crear guias de remitente y de transportista DtFacturas = new DataTable(); DtFacturas = new BaseFunctions().SelectDistinct(DetallesRequerimientos, "Factura"); //calcular el total del peso enviado for (int i = 0; i < this.TdgDetalleHojaDespacho.Splits[0].Rows.Count; i++) { if (this.TdgDetalleHojaDespacho.Columns[2].CellValue(i) != DBNull.Value) { PesoTotal += Convert.ToInt32(this.TdgDetalleHojaDespacho.Columns[10].CellValue(i)); } } #region crear tablas //Insertar Hoja de despacho E_HojaDespacho ObjHojaDespacho = new E_HojaDespacho(); ObjHojaDespacho.EmpresaID = AppSettings.EmpresaID; ObjHojaDespacho.EmpresaTransporte = EmpresaTransporte; ObjHojaDespacho.NombreChofer = NomTransportista; ObjHojaDespacho.placa = TxtPlaca.Text; ObjHojaDespacho.Carrosa = TxtCarrosa.Text; ObjHojaDespacho.FechaLlegada = Convert.ToDateTime(DeFechaLlegada.Value); ObjHojaDespacho.FechaSalida = Convert.ToDateTime(DeFechaSalida.Value); ObjHojaDespacho.NumJabas = 0; ObjHojaDespacho.PesoTotal = PesoTotal; ObjHojaDespacho.PesoNeto = 0; ObjHojaDespacho.TotalAnimales = 0; ObjHojaDespacho.TaraTotal = 0; ObjHojaDespacho.UsuarioID = AppSettings.UserID; NumHojaDespacho = new CL_HojaDespacho().InsertHojaDespacho(ObjHojaDespacho, AppSettings.SedeID); //Tabla para insertar el detalle de la hoja de despacho DetalleHojaDespacho = new DataTable(); DetalleHojaDespacho.TableName = "DetalleHojaDespacho"; DetalleHojaDespacho.Columns.Add("ProductoID", typeof(string)); DetalleHojaDespacho.Columns.Add("NumHojaDespacho", typeof(string)); DetalleHojaDespacho.Columns.Add("NumGuiaRemision", typeof(string)); DetalleHojaDespacho.Columns.Add("NumRequerimiento", typeof(string)); DetalleHojaDespacho.Columns.Add("NroFactura", typeof(string)); DetalleHojaDespacho.Columns.Add("TotalPeso", typeof(decimal)); DetalleHojaDespacho.Columns.Add("Motivo", typeof(string)); DetalleHojaDespacho.Columns.Add("NumGuiaTransportista", typeof(string)); DetalleHojaDespacho.Columns.Add("Bultos", typeof(string)); DetalleHojaDespacho.Columns.Add("IDProveedor", typeof(int)); //Tabla para Mostrar Hoja de despacho DetalleHojaDespacho2 = new DataTable(); DetalleHojaDespacho2.TableName = "DetalleHojaDespacho2"; DetalleHojaDespacho2.Columns.Add("Proveedor", typeof(string)); DetalleHojaDespacho2.Columns.Add("NroFactura", typeof(string)); DetalleHojaDespacho2.Columns.Add("NumGuiaRemision", typeof(string)); DetalleHojaDespacho2.Columns.Add("NumGuiaTransportista", typeof(string)); DetalleHojaDespacho2.Columns.Add("Producto", typeof(string)); DetalleHojaDespacho2.Columns.Add("TotalPeso", typeof(decimal)); DetalleHojaDespacho2.Columns.Add("Bultos", typeof(string)); #endregion foreach (DataRow Row in DtFacturas.Rows) { NroFactura = Row["Factura"].ToString(); //filtrar tabla para obtener los datos relacionados a la factura y asi crear las guias de remision DataView DvDetallesRequerimientos = new DataView(DetallesRequerimientos); DvDetallesRequerimientos.RowFilter = "Factura = '" + NroFactura + "'"; DataTable DtRequerimientos; DtRequerimientos = DvDetallesRequerimientos.ToTable(); DtRequerimientos.DefaultView.Sort = "Producto"; try { #region crear tablas //detalles de guia de remision DetalleGuiaRemision = new DataTable(); DetalleGuiaRemision.TableName = "DetalleGuiaRemision"; DetalleGuiaRemision.Columns.Add("NumGuiaRemision", typeof(string)); DetalleGuiaRemision.Columns.Add("ProductoID", typeof(string)); DetalleGuiaRemision.Columns.Add("NumRequerimiento", typeof(string)); DetalleGuiaRemision.Columns.Add("PesoNeto", typeof(decimal)); DetalleGuiaRemision.Columns.Add("PesoTara", typeof(decimal)); DetalleGuiaRemision.Columns.Add("CantidadEnviada", typeof(decimal)); DetalleGuiaRemision.Columns.Add("CantidadRecibida", typeof(decimal)); DetalleGuiaRemision.Columns.Add("EstadoID", typeof(int)); //detalles de guia de transporte DetalleGuiaTransporte = new DataTable(); DetalleGuiaTransporte.TableName = "DetalleGuiaTransportista"; DetalleGuiaTransporte.Columns.Add("NumGuiaTransportista", typeof(string)); DetalleGuiaTransporte.Columns.Add("ProductoID", typeof(string)); DetalleGuiaTransporte.Columns.Add("NumRequerimiento", typeof(string)); DetalleGuiaTransporte.Columns.Add("PesoNeto", typeof(decimal)); DetalleGuiaTransporte.Columns.Add("PesoTara", typeof(decimal)); DetalleGuiaTransporte.Columns.Add("CantidadEnviada", typeof(decimal)); //tabla para actualizar el estado del requerimiento DataTable DtActuEstadoReq = new DataTable(); DtActuEstadoReq.TableName = "DetalleRequerimiento"; DtActuEstadoReq.Columns.Add("NumRequerimiento", typeof(string)); DtActuEstadoReq.Columns.Add("CantidadTransito", typeof(decimal)); DtActuEstadoReq.Columns.Add("ProductoID", typeof(string)); DtActuEstadoReq.Columns.Add("EstadoID", typeof(int)); #endregion NumGuiaRemision = CrearGuiaRemitente(); //se crea guia de transportista si solo si el camion no pertenece a la empresa de destino if ((AppSettings.EmpresaID != CamionEmpresaID) && CamionEmpresaID != "EX") { NumGuiaTransportista = CrearGuiaTransporte(); } else { NumGuiaTransportista = ""; //no necesita guia de transporte } int Cantidad = 0; //contador que indicara si la cantidad de productos no sean mayor de 12 (lo que puede contener la guia) foreach (DataRow Row2 in DtRequerimientos.Rows) { Cantidad++; if (Cantidad > 12) { Cantidad = 1; //se crea guia de transportista si solo si el camion no pertenece a la empresa de destino if ((AppSettings.EmpresaID != CamionEmpresaID) && CamionEmpresaID != "EX") { NumGuiaTransportista = CrearGuiaTransporte(); } else { NumGuiaTransportista = ""; //no necesita guia de transporte } NumGuiaRemision = CrearGuiaRemitente(); } if (Row2["Anular"] == DBNull.Value || Row2["Anular"].ToString() == "False") { //analizar el stock y si se logro la actualizacion crear las guias bool Actualizo = false; //'9-' indica que es guia remitente //es para kardex if (Row2["TipoRequerimiento"].ToString() == "C") //en compras baja el stock local y el disponible { Actualizo = new CL_Almacen().UpdateStockSustraccion(Row2["AlmacenID"].ToString(), Convert.ToString(Row2["SProductoID"]), Convert.ToDecimal(Row2["CantidadDespachada"]), "D", AppSettings.EmpresaID + CboSedeDestino.SelectedValue.ToString() + Row2["AlmacenID"].ToString().Substring(7), 2, "09", NumGuiaRemision.Substring(2, 3), Convert.ToInt32(NumGuiaRemision.Substring(6)), "11", AppSettings.UserID); } else if (Row2["TipoRequerimiento"].ToString() == "T")//en transferencia solo baja el stock local { Actualizo = new CL_Almacen().UpdateStockSustraccion(Row2["AlmacenID"].ToString(), Convert.ToString(Row2["SProductoID"]), Convert.ToDecimal(Row2["CantidadDespachada"]), "S", AppSettings.EmpresaID + CboSedeDestino.SelectedValue.ToString() + Row2["AlmacenID"].ToString().Substring(7), 2, "09", NumGuiaRemision.Substring(2, 3), Convert.ToInt32(NumGuiaRemision.Substring(6)), "11", AppSettings.UserID); } if (Actualizo == true) { //para detalle guia remision DataRow RowGR = DetalleGuiaRemision.NewRow(); RowGR["NumGuiaRemision"] = NumGuiaRemision; RowGR["ProductoID"] = Row2["SProductoID"]; RowGR["NumRequerimiento"] = Row2["NumRequerimiento"]; RowGR["PesoNeto"] = Row2["PesoTotal"]; RowGR["PesoTara"] = 0; RowGR["CantidadEnviada"] = Row2["CantidadDespachada"]; RowGR["CantidadRecibida"] = DBNull.Value; RowGR["EstadoID"] = 2; DetalleGuiaRemision.Rows.Add(RowGR); //para detalle guia transporte if (NumGuiaTransportista != "") { DataRow RowGT = DetalleGuiaTransporte.NewRow(); RowGT["NumGuiaTransportista"] = NumGuiaTransportista; RowGT["ProductoID"] = Row2["SProductoID"]; RowGT["NumRequerimiento"] = Row2["NumRequerimiento"]; RowGT["PesoNeto"] = Row2["PesoTotal"]; RowGT["PesoTara"] = 0; RowGT["CantidadEnviada"] = Row2["CantidadDespachada"]; DetalleGuiaTransporte.Rows.Add(RowGT); } //para estado requerimiento DataRow RowD2 = DtActuEstadoReq.NewRow(); RowD2["ProductoID"] = Row2["ProductoID"]; RowD2["NumRequerimiento"] = Row2["NumRequerimiento"]; //identificar el estado actual del requerimiento if (AppSettings.SedeID == "001PU") { if (Convert.ToDecimal(Row2["CantidadRecibida"]) + Convert.ToDecimal(Row2["CantidadDespachada"]) == Convert.ToDecimal(Row2["CantidadSolicitada"])) { //transito DESTINO total RowD2["EstadoID"] = 9; } else if (Convert.ToDecimal(Row2["CantidadRecibida"]) + Convert.ToDecimal(Row2["CantidadDespachada"]) < Convert.ToDecimal(Row2["CantidadSolicitada"])) { //transito DESTINO parcial RowD2["EstadoID"] = 8; } /*siempre va a estar en transito porque la * transferencia es entre almacenes y no pasa por industria*/ if (RBTransferencia.Checked == true) { RowD2["CantidadTransito"] = Row2["CantidadDespachada"]; } /*en este caso sera "0" porque las compras vienen de lima*/ if (RbCompras.Checked == true) { RowD2["CantidadTransito"] = 0; } } else { if (Convert.ToDecimal(Row2["CantidadRecibida"]) + Convert.ToDecimal(Row2["CantidadTransito"]) + Convert.ToDecimal(Row2["CantidadDespachada"]) == Convert.ToDecimal(Row2["CantidadSolicitada"])) { //transito total RowD2["EstadoID"] = 2; } else if (Convert.ToDecimal(Row2["CantidadRecibida"]) + Convert.ToDecimal(Row2["CantidadTransito"]) + Convert.ToDecimal(Row2["CantidadDespachada"]) < Convert.ToDecimal(Row2["CantidadSolicitada"])) { //transito parcial RowD2["EstadoID"] = 6; } RowD2["CantidadTransito"] = Row2["CantidadDespachada"]; } DtActuEstadoReq.Rows.Add(RowD2); //para detalle hoja despacho DataRow RowHD = DetalleHojaDespacho.NewRow(); RowHD["ProductoID"] = Row2["SProductoID"]; RowHD["NumHojaDespacho"] = NumHojaDespacho; RowHD["NumGuiaRemision"] = NumGuiaRemision; RowHD["NumRequerimiento"] = Row2["NumRequerimiento"]; RowHD["NroFactura"] = Row2["Factura"]; RowHD["TotalPeso"] = Row2["PesoTotal"]; RowHD["Motivo"] = Row2["Motivo"]; RowHD["NumGuiaTransportista"] = NumGuiaTransportista; RowHD["Bultos"] = Row2["Bultos"]; RowHD["IDProveedor"] = Row2["IDProveedor"]; DetalleHojaDespacho.Rows.Add(RowHD); //para detalle hoja despacho para presentar DataRow RowHD2 = DetalleHojaDespacho2.NewRow(); RowHD2["Proveedor"] = Row2["Proveedor"]; RowHD2["NroFactura"] = Row2["Factura"]; RowHD2["NumGuiaRemision"] = NumGuiaRemision; RowHD2["NumGuiaTransportista"] = NumGuiaTransportista; RowHD2["Producto"] = Row2["Producto"]; RowHD2["TotalPeso"] = Row2["PesoTotal"]; RowHD2["Bultos"] = Row2["Bultos"]; DetalleHojaDespacho2.Rows.Add(RowHD2); } else { MessageBox.Show("No existe Stock suficiente en el almacen " + Row2["AlmacenID"].ToString() + " del producto \r\n" + Row2["Producto"].ToString() + ".", "Stock Almacen", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } } #region Actualizar con Xml //insertar detalles guia remision if (DetalleGuiaRemision.Rows.Count > 0) { string xml = new BaseFunctions().GetXML(DetalleGuiaRemision).Replace("NewDataSet", "DocumentElement"); bool Valor; Valor = new CL_GuiaRemision().InsertXMLDetalleGuiaRemision(xml); if (Valor == false) { MessageBox.Show("Ocurrio un error al intentar guardar el detalle de la Guía de Remisión", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } //insertar detalle guia de transporte if (DetalleGuiaTransporte.Rows.Count > 0) { string xml = new BaseFunctions().GetXML(DetalleGuiaTransporte).Replace("NewDataSet", "DocumentElement"); bool Valor; Valor = new CL_GuiaTransportista().InsertXMLDetalleGuiaTransporte(xml); if (Valor == false) { MessageBox.Show("Ocurrio un error al intentar guardar el detalle de la Guía de Transporte", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } //actualizar estado de los requerimientos if (DtActuEstadoReq.Rows.Count > 0) { string xml = new BaseFunctions().GetXML(DtActuEstadoReq).Replace("NewDataSet", "DocumentElement"); bool Valor; Valor = new CL_Requerimientos().UpdateXMLDetalleRequerimientoEstado(xml, "E", AppSettings.UserID, AppSettings.SedeID); if (Valor == false) { MessageBox.Show("Ocurrio un error al intentar actualizar el estado de los requerimientos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } MessageBox.Show("Se guardo correctamente los datos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); #endregion } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }//fin del foreach de las facturas //insertar los detalles de hoja de despacho if (DetalleHojaDespacho.Rows.Count > 0) { string xml = new BaseFunctions().GetXML(DetalleHojaDespacho).Replace("NewDataSet", "DocumentElement"); bool Valor; Valor = new CL_HojaDespacho().InsertXMLDetalleHojaDespacho(xml); if (Valor == false) { MessageBox.Show("Ocurrio un error al intentar insertar los detalles de la hoja de despacho", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { TdgDetalleHoja.Visible = true; TdgDetalleHoja.SetDataBinding(DetalleHojaDespacho2, "", true); } } }
public string DespachoInterno(DataTable DtProductosDespacho, int UsuarioID, string Empresa, string NomEmpresa, string Sede) { string NumHojaDespacho; string NumGuiaRemision; string NumGuiaTransportista; DataTable DetalleHojaDespacho = new DataTable(); #region crear tablas //Insertar Hoja de despacho E_HojaDespacho ObjHojaDespacho = new E_HojaDespacho(); ObjHojaDespacho.EmpresaID = Empresa; ObjHojaDespacho.EmpresaTransporte = NomEmpresa; ObjHojaDespacho.NombreChofer = "Sin chofer"; ObjHojaDespacho.placa = "Sin Placa"; ObjHojaDespacho.Carrosa = null; ObjHojaDespacho.FechaLlegada = DateTime.Now; ObjHojaDespacho.FechaSalida = DateTime.Now; ObjHojaDespacho.NumJabas = 0; ObjHojaDespacho.PesoTotal = 0; ObjHojaDespacho.PesoNeto = 0; ObjHojaDespacho.TotalAnimales = 0; ObjHojaDespacho.TaraTotal = 0; ObjHojaDespacho.UsuarioID = UsuarioID; NumHojaDespacho = new CL_HojaDespacho().InsertHojaDespacho(ObjHojaDespacho, Sede); //Tabla para insertar el detalle de la hoja de despacho DetalleHojaDespacho = new DataTable(); DetalleHojaDespacho.TableName = "DetalleHojaDespacho"; DetalleHojaDespacho.Columns.Add("ProductoID", typeof(string)); DetalleHojaDespacho.Columns.Add("NumHojaDespacho", typeof(string)); DetalleHojaDespacho.Columns.Add("NumGuiaRemision", typeof(string)); DetalleHojaDespacho.Columns.Add("NumRequerimiento", typeof(string)); DetalleHojaDespacho.Columns.Add("NroFactura", typeof(string)); DetalleHojaDespacho.Columns.Add("TotalPeso", typeof(decimal)); DetalleHojaDespacho.Columns.Add("Motivo", typeof(string)); DetalleHojaDespacho.Columns.Add("NumGuiaTransportista", typeof(string)); DetalleHojaDespacho.Columns.Add("Bultos", typeof(string)); DetalleHojaDespacho.Columns.Add("IDProveedor", typeof(int)); #endregion try { #region crear tablas //tabla para actualizar el estado del requerimiento DataTable DtActuEstadoReq = new DataTable(); DtActuEstadoReq.TableName = "DetalleRequerimiento"; DtActuEstadoReq.Columns.Add("NumRequerimiento", typeof(string)); DtActuEstadoReq.Columns.Add("ProductoID", typeof(string)); DtActuEstadoReq.Columns.Add("CantidadRecibida", typeof(decimal)); DtActuEstadoReq.Columns.Add("EstadoID", typeof(int)); //tabla para actualizar el nuevo stock (agregar productos recepcionados) DataTable DtActuStockLocal = new DataTable(); DtActuStockLocal.TableName = "StockAlmacen"; DtActuStockLocal.Columns.Add("AlmacenID", typeof(string)); DtActuStockLocal.Columns.Add("ProductoID", typeof(string)); DtActuStockLocal.Columns.Add("Adicion", typeof(decimal)); #endregion NumGuiaRemision = Empresa + "PRO-0000001"; NumGuiaTransportista = ""; foreach (DataRow Row2 in DtProductosDespacho.Rows) { if (Convert.ToBoolean(Row2["Agregar"]) == true) { //analizar el stock y si se logro la actualizacion crear las guias bool Actualizo = false; //mueve kardex //50 es para "GUIA SALIDA PRODUCCION" Actualizo = new CL_Almacen().UpdateStockSustraccion(Row2["AlmacenOrigen"].ToString(), Convert.ToString(Row2["ProductoID"]), Convert.ToDecimal(Row2["CantidadSolicitada"]), "S", Empresa + Sede + "PRO", 2, "50", "PRO", null, "10", UsuarioID); if (Actualizo == true) { //para estado requerimiento DataRow RowD2 = DtActuEstadoReq.NewRow(); RowD2["NumRequerimiento"] = Row2["NumRequerimiento"]; RowD2["ProductoID"] = Row2["ProductoID"]; RowD2["CantidadRecibida"] = Row2["CantidadSolicitada"]; RowD2["EstadoID"] = 5; //Recepcion completa DtActuEstadoReq.Rows.Add(RowD2); //para detalle hoja despacho DataRow RowHD = DetalleHojaDespacho.NewRow(); RowHD["ProductoID"] = Row2["ProductoID"]; RowHD["NumHojaDespacho"] = NumHojaDespacho; RowHD["NumGuiaRemision"] = NumGuiaRemision; RowHD["NumRequerimiento"] = Row2["NumRequerimiento"]; RowHD["NroFactura"] = ""; RowHD["TotalPeso"] = DBNull.Value; RowHD["Motivo"] = Row2["Observacion"]; RowHD["NumGuiaTransportista"] = NumGuiaTransportista; RowHD["Bultos"] = Row2["CantidadSolicitada"].ToString() + " " + Row2["UnidadMedidaID"].ToString(); RowHD["IDProveedor"] = DBNull.Value; DetalleHojaDespacho.Rows.Add(RowHD); #region actualiza el stock local DataRow DrR = DtActuStockLocal.NewRow(); DrR["AlmacenID"] = Row2["AlmacenDestino"]; DrR["ProductoID"] = Row2["ProductoID"]; DrR["Adicion"] = Row2["CantidadSolicitada"]; DtActuStockLocal.Rows.Add(DrR); #endregion } else { throw new Exception("No existe Stock suficiente en el almacen " + Row2["AlmacenOrigen"].ToString() + " del producto \r\n" + Row2["NomProducto"].ToString() + "."); } } }//fin foreach #region agrupar para actualizar el stock local //Agrupar los productos apra almacenarlos DataTable DtProducto = new DataTable(); DataTable DtActuStockLocal2 = new DataTable(); DtActuStockLocal2.TableName = "StockAlmacen"; DtActuStockLocal2.Columns.Add("AlmacenID", typeof(string)); DtActuStockLocal2.Columns.Add("AlmacenOrigen", typeof(string)); DtActuStockLocal2.Columns.Add("ProductoID", typeof(string)); DtActuStockLocal2.Columns.Add("Adicion", typeof(decimal)); DtActuStockLocal2.Columns.Add("NroDocumento", typeof(string)); DtProducto = new BaseFunctions().SelectDistinct(DtActuStockLocal, "ProductoID", "AlmacenID"); foreach (DataRow RowP in DtProducto.Rows) { DataView Dv = new DataView(DtActuStockLocal); Dv.RowFilter = "ProductoID = '" + RowP["ProductoID"] + "' and AlmacenID = '" + RowP["AlmacenID"] + "'"; decimal Suma = 0; foreach (DataRowView Drv in Dv) //sumar las cantidades por producto { Suma += Convert.ToDecimal(Drv["Adicion"]); } DataRow DrR = DtActuStockLocal2.NewRow(); DrR["AlmacenID"] = RowP["AlmacenID"]; DrR["AlmacenOrigen"] = Empresa + Sede + RowP["AlmacenID"].ToString().Substring(7); DrR["ProductoID"] = RowP["ProductoID"]; DrR["Adicion"] = Suma; DrR["NroDocumento"] = NumHojaDespacho; DtActuStockLocal2.Rows.Add(DrR); } #endregion #region Actualizar con Xml //actualizar estado de los requerimientos if (DtActuEstadoReq.Rows.Count > 0 & DtActuStockLocal2.Rows.Count > 0 & DetalleHojaDespacho.Rows.Count > 0) { bool Valor; string xml = new BaseFunctions().GetXML(DtActuEstadoReq).Replace("NewDataSet", "DocumentElement"); Valor = new CL_Requerimientos().UpdateXMLDetalleRequerimientoEstado(xml, "I", UsuarioID, Sede);//interno string xml1 = new BaseFunctions().GetXML(DtActuStockLocal2).Replace("NewDataSet", "DocumentElement"); Valor = new CL_Almacen().UpdateXMLStockAlmacen(xml1, 4, UsuarioID); string xml2 = new BaseFunctions().GetXML(DetalleHojaDespacho).Replace("NewDataSet", "DocumentElement"); Valor = new CL_HojaDespacho().InsertXMLDetalleHojaDespacho(xml2); } #endregion return(NumHojaDespacho); } catch (Exception ex) { throw new Exception(ex.Message); } }