예제 #1
0
        public int InsertCierreKardex(int Accion, int UsuarioID, string Almacen, string ProductoID, string EmpresaID, string Periodo, int Anno, bool CostoCero, decimal Cantidad2, decimal CostoUnitario)
        {
            int       totalAfectados = 0;
            CD_Kardex ObjCD_Kardex   = new CD_Kardex(AppSettings.GetConnectionString);

            if (Accion == 1)
            {
                DataTable dtTMP  = new DataTable();
                DataTable dtTMP2 = new DataTable();
                if (CostoCero == false)
                {
                    //aplicar la lógica del cierre en el reporte mensual
                    if (ProductoID == "TODOS")
                    {
                        ProductoID = "";
                    }


                    DateTime FecInicial, FecFinal;
                    FecInicial = new DateTime(Anno, Convert.ToInt16(Periodo), 1);
                    FecFinal   = new DateTime(Anno, Convert.ToInt16(Periodo), 1).AddMonths(1);


                    dtTMP2 = new CL_Kardex().getDTKardex_varios(ProductoID, EmpresaID, FecInicial, FecFinal, Almacen, 1);
                    dtTMP  = new CL_Kardex().ArmarReporteKardex(dtTMP2);


                    //Seleccionamos disticnt de los productos
                    DataTable DtProductos = new DataTable();
                    DtProductos = dtTMP.DefaultView.ToTable(true, "ProductoID");

                    //tabla apra agregar los cierres
                    DataTable DTCierre = new DataTable("Cierre");
                    DTCierre.Columns.Add("ProductoID", typeof(string));
                    DTCierre.Columns.Add("Cantidad", typeof(decimal));
                    DTCierre.Columns.Add("CostoUnitario", typeof(decimal));


                    foreach (DataRow DRP in DtProductos.Rows)
                    {
                        //filtramos datos por producto
                        DataView Dv = new DataView(dtTMP, "ProductoID='" + DRP["ProductoID"].ToString() + "'", "ID DESC", DataViewRowState.CurrentRows);

                        DataRow DR = DTCierre.NewRow();
                        DR["ProductoID"]    = DRP["ProductoID"];
                        DR["Cantidad"]      = decimal.Round(Convert.ToDecimal(Dv[0]["FCantidad"]), 2);
                        DR["CostoUnitario"] = decimal.Round(Convert.ToDecimal(Dv[0]["FCostoUnitario"]), 2);
                        DTCierre.Rows.Add(DR);
                    }
                    string XML  = "";
                    string _xml = new BaseFunctions().GetXML(DTCierre).Replace("NewDataSet", "DocumentElement");
                    XML = _xml.Replace("Table", "Cierre");

                    //insercion masiva del kardex
                    totalAfectados = ObjCD_Kardex.InsertCierreKardex(Accion, XML, UsuarioID, null, null, EmpresaID, Periodo, Anno, false, Cantidad2, CostoUnitario);
                }
                else
                {
                    string XML = "";
                    totalAfectados = ObjCD_Kardex.InsertCierreKardex(Accion, XML, UsuarioID, Almacen, ProductoID, EmpresaID, Periodo, Anno, CostoCero, Cantidad2, CostoUnitario);
                }
            }
            else if (Accion == 2)
            {
                //ingreso manual
                totalAfectados = ObjCD_Kardex.InsertCierreKardex(Accion, "", UsuarioID, Almacen, ProductoID, EmpresaID, Periodo, Anno, CostoCero, Cantidad2, CostoUnitario);
            }
            return(totalAfectados);
        }
예제 #2
0
        public int InsertCierreKardex(int Accion, int UsuarioID, string Almacen, string ProductoID, string EmpresaID, string Periodo, int Anno, bool CostoCero, decimal Cantidad2, decimal CostoUnitario)
        {
            int       totalAfectados = 0;
            CD_Kardex ObjCD_Kardex   = new CD_Kardex(AppSettings.GetConnectionString);

            if (Accion == 1)
            {
                DataTable dtTMP = new DataTable();
                if (CostoCero == false)
                {
                    //aplicar la lógica del cierre en el reporte mensual
                    if (ProductoID == "TODOS")
                    {
                        ProductoID = "";
                    }


                    DateTime FecInicial, FecFinal;
                    FecInicial = new DateTime(Anno, Convert.ToInt16(Periodo), 1);
                    FecFinal   = new DateTime(Anno, Convert.ToInt16(Periodo), 1).AddMonths(1);

                    dtTMP = new CL_Kardex().getDTKardex_varios(ProductoID, EmpresaID, FecInicial, FecFinal, Almacen, 2);

                    //buscar '0' en los valores, no deberia existir el '0'
                    DataView DVCero = new DataView(dtTMP, "PrecioUnitario = 0", "", DataViewRowState.CurrentRows);
                    if (DVCero.Count > 0)
                    {
                        throw new Exception("Hay " + DVCero.Count.ToString() + " costo(s) unitario igual a 0\n\nno se insertara ningun registro");
                    }

                    decimal Cantidad = 0, CantidadAcumulada = 0, PrecioPonderado = 0, CostoAcumulado = 0;

                    //UsuarioID
                    //Creamos tabla para ordenar los datos
                    DataTable DtKardex = new DataTable("GetKardex");
                    DtKardex.Columns.Add("ID", typeof(int)).AutoIncrement = true;
                    DtKardex.Columns.Add("ProductoID", typeof(string));
                    DtKardex.Columns.Add("FCantidad", typeof(decimal));
                    DtKardex.Columns.Add("FCostoUnitario", typeof(decimal));


                    //Seleccionamos disticnt de los productos
                    DataTable DtProductos = new DataTable();
                    DtProductos = dtTMP.DefaultView.ToTable(true, "ProductoID");

                    foreach (DataRow DRP in DtProductos.Rows)
                    {
                        //filtramos datos por producto
                        DataView Dv = new DataView(dtTMP, "ProductoID='" + DRP["ProductoID"].ToString() + "'", "AudCrea ASC", DataViewRowState.CurrentRows);

                        foreach (DataRowView Dr in Dv)
                        {
                            DataRow DR = DtKardex.NewRow();
                            DR["ProductoID"] = Dr["ProductoID"];

                            Cantidad = Convert.ToDecimal(Dr["Cantidad"]);

                            //validar si es entrada o salida
                            if (Dr["Tipo"].ToString() == "I")
                            {
                                PrecioPonderado      = Convert.ToDecimal(Dr["PrecioUnitario"]);//temporal
                                CantidadAcumulada   += Cantidad;
                                CostoAcumulado      += Cantidad * PrecioPonderado;
                                DR["FCantidad"]      = CantidadAcumulada;
                                PrecioPonderado      = CostoAcumulado / CantidadAcumulada;//precio real nuevo
                                DR["FCostoUnitario"] = PrecioPonderado;
                            }
                            else if (Dr["Tipo"].ToString() == "S" & Dr["TipoOperacion"].ToString() == "01") //salida por venta
                            {
                                CantidadAcumulada   -= Cantidad;
                                CostoAcumulado       = CantidadAcumulada * PrecioPonderado;
                                DR["FCantidad"]      = CantidadAcumulada;
                                PrecioPonderado      = CostoAcumulado / CantidadAcumulada;
                                DR["FCostoUnitario"] = PrecioPonderado;
                            }
                            else if (Dr["Tipo"].ToString() == "S")                              //otro tipo de salida
                            {
                                PrecioPonderado      = Convert.ToDecimal(Dr["PrecioUnitario"]); //temporal
                                CantidadAcumulada   -= Cantidad;
                                DR["FCantidad"]      = CantidadAcumulada;
                                CostoAcumulado      -= Cantidad * PrecioPonderado;
                                PrecioPonderado      = CostoAcumulado / CantidadAcumulada;
                                DR["FCostoUnitario"] = PrecioPonderado;
                            }
                            else if (Dr["Tipo"].ToString() == "A") //saldo inicial
                            {
                                PrecioPonderado    = Convert.ToDecimal(Dr["PrecioUnitario"]);
                                CantidadAcumulada += Cantidad;

                                CostoAcumulado      += Cantidad * PrecioPonderado;
                                DR["FCantidad"]      = Cantidad;
                                DR["FCostoUnitario"] = PrecioPonderado;
                            }
                            DtKardex.Rows.Add(DR);
                        }
                        Cantidad = 0; CantidadAcumulada = 0; PrecioPonderado = 0;
                    }

                    //una ves creada la tabla, se debe capturar los totales y ordenarlos en otra tabla
                    //Creamos tabla para ordenar los datos


                    DataTable DTCierre = new DataTable("Cierre");
                    DTCierre.Columns.Add("ProductoID", typeof(string));
                    DTCierre.Columns.Add("Cantidad", typeof(decimal));
                    DTCierre.Columns.Add("CostoUnitario", typeof(decimal));
                    foreach (DataRow DRP in DtProductos.Rows)
                    {
                        //cacturar el ultimo valor agregado, ese sera el costo nuevo
                        DataView DV = new DataView(DtKardex, "ProductoID = '" + DRP["ProductoID"].ToString() + "'", "ID DESC", DataViewRowState.CurrentRows);
                        DataRow  DR = DTCierre.NewRow();
                        DR["ProductoID"]    = DRP["ProductoID"];
                        DR["Cantidad"]      = DV[0]["FCantidad"];
                        DR["CostoUnitario"] = DV[0]["FCostoUnitario"];
                        DTCierre.Rows.Add(DR);
                    }
                    string XML = "";

                    string _xml = new BaseFunctions().GetXML(DTCierre).Replace("NewDataSet", "DocumentElement");
                    XML = _xml.Replace("Table", "Cierre");

                    //insercion masiva del kardex
                    totalAfectados = ObjCD_Kardex.InsertCierreKardex(Accion, XML, UsuarioID, null, null, EmpresaID, Periodo, Anno, false, Cantidad2, CostoUnitario);
                }
                else
                {
                    string XML = "";
                    totalAfectados = ObjCD_Kardex.InsertCierreKardex(Accion, XML, UsuarioID, Almacen, ProductoID, EmpresaID, Periodo, Anno, CostoCero, Cantidad2, CostoUnitario);
                }
            }
            else if (Accion == 2)
            {
                //ingreso manual
                totalAfectados = ObjCD_Kardex.InsertCierreKardex(Accion, "", UsuarioID, Almacen, ProductoID, EmpresaID, Periodo, Anno, CostoCero, Cantidad2, CostoUnitario);
            }
            return(totalAfectados);
        }