예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
                }
            }
        }