Ejemplo n.º 1
0
        private string Detalle(DOCUMENTO doc, ref List <DetalleContab> contas, CONPOSAPH enca, List <DOCUMENTOF> docf, bool hijo)
        {
            contas = new List <DetalleContab>();
            TAT001Entities   db   = new TAT001Entities();
            List <CONPOSAPP> conp = new List <CONPOSAPP>();
            CLIENTE          clien;
            CUENTA           cuent;
            TCAMBIO          cambio = new TCAMBIO();
            TAXEOH           taxh   = new TAXEOH();
            List <TAXEOP>    taxp   = new List <TAXEOP>();
            MATERIAL         material;

            string[] grupos;
            string   grupo   = "";
            string   materi  = "";
            string   factura = "";

            try
            {
                try
                {
                    conp = db.CONPOSAPPs.Where(x => x.CONSECUTIVO == enca.CONSECUTIVO).ToList();
                }
                catch (Exception f)
                {
                    return("No se encontro datos de configuracion para detalle contable");
                }
                try
                {
                    clien = db.CLIENTEs.Where(x => x.KUNNR == doc.PAYER_ID).Single();
                }
                catch (Exception g)
                {
                    return("No se encontro datos de cliente para detalle contable");
                }
                try
                {
                    cuent = db.CUENTAs.Where(x => x.PAIS_ID == doc.PAIS_ID && x.SOCIEDAD_ID == doc.SOCIEDAD_ID && x.TALL_ID == doc.TALL_ID).Single();
                }
                catch (Exception h)
                {
                    return("No se encontro datos de cuenta para detalle contable");
                }
                try
                {
                    string pais = db.TAX_LAND.Where(x => x.ACTIVO == true && x.PAIS_ID == doc.PAIS_ID).Select(x => x.PAIS_ID).Single();
                    if (String.IsNullOrEmpty(pais) == false)
                    {
                        if (enca.TIPO_DOC == "DG" || enca.TIPO_DOC == "BB" || enca.TIPO_DOC == "KG")
                        {
                            try
                            {
                                taxh = db.TAXEOHs.Where(x => x.PAIS_ID == doc.PAIS_ID && x.SOCIEDAD_ID == doc.SOCIEDAD_ID && x.KUNNR == clien.KUNNR && x.CONCEPTO_ID == doc.CONCEPTO_ID).Single();
                            }
                            catch (Exception)
                            {
                                return("No se encontro datos de configuracion de taxeo");
                            }
                        }
                    }
                }
                catch (Exception z)
                {
                }
                try
                {
                    if (doc.PAIS_ID == "CO")
                    {
                        if (enca.TIPO_DOC == "DG" || enca.TIPO_DOC == "BB")
                        {
                            taxp = db.TAXEOPs.Where(x => x.PAIS_ID == doc.PAIS_ID && x.SOCIEDAD_ID == doc.SOCIEDAD_ID && x.KUNNR == clien.KUNNR && x.CONCEPTO_ID == doc.CONCEPTO_ID).ToList();
                        }
                    }
                }
                catch (Exception)
                {
                    return("No se encontro configuracion para extraccion de retencion");
                }
                if (docf.Count > 0)
                {
                    factura = docf[0].FACTURA;
                }
                if (String.IsNullOrEmpty(clien.EXPORTACION) == false)
                {
                    try
                    {
                        cambio = db.TCAMBIOs.Where(x => x.FCURR == doc.MONEDA_ID && x.TCURR == "USD" && x.GDATU == DateTime.Today).Single();
                    }
                    catch (Exception)
                    {
                        return("No se encontro el cambio de moneda de la fecha actual.");
                    }
                }

                for (int i = 0; i < conp.Count; i++)
                {
                    if (conp[i].POSICION == 1)
                    {
                        DetalleContab conta = new DetalleContab();
                        conta.POS_TYPE  = conp[i].KEY;
                        conta.ACCOUNT   = cuent.ABONO.ToString();
                        conta.COMP_CODE = doc.SOCIEDAD_ID;
                        conta.BUS_AREA  = conp[i].BUS_AREA;
                        conta.POST_KEY  = conp[i].POSTING_KEY;
                        conta.TEXT      = doc.CONCEPTO;
                        conta.BALANCE   = Conversion(Convert.ToDecimal(doc.MONTO_DOC_MD), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                        if (conp[i].POSTING_KEY == "11")
                        {
                            if (enca.TIPO_DOC == "BB")
                            {
                                if (doc.PAIS_ID == "CO")
                                {
                                    conta.BALANCE = Conversion(Convert.ToDecimal(doc.MONTO_DOC_MD + (doc.MONTO_DOC_MD * taxh.PORC / 100)), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                }
                                conta.REF_KEY1 = clien.STCD1;
                                conta.REF_KEY3 = clien.NAME1;
                                if (enca.CALC_TAXT == false)
                                {
                                    conta.TAX_CODE = conp[i].TAX_CODE;
                                }
                            }
                            else
                            {
                                conta.REF_KEY1 = conp[i].REF_KEY1;
                                conta.REF_KEY3 = conp[i].REF_KEY3;
                            }
                            conta.ACCOUNT = clien.PAYER;
                        }
                        if (conp[i].POSTING_KEY == "31")
                        {
                            conta.ACCOUNT = clien.PROVEEDOR_ID;
                            if (enca.TIPO_DOC == "KR" && doc.PAIS_ID == "CO")
                            {
                                conta.ASSIGNMENT = clien.PAYER;
                                if (enca.CALC_TAXT == false)
                                {
                                    conta.TAX_CODE = taxh.IMPUESTO_ID;
                                }
                            }
                            if (enca.TIPO_DOC == "KG" && doc.PAIS_ID == "CO")
                            {
                                conta.BALANCE = Conversion(Convert.ToDecimal(doc.MONTO_DOC_MD + (doc.MONTO_DOC_MD * taxh.PORC / 100)), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                            }
                        }
                        if (conp[i].POSTING_KEY == "50" && enca.TIPO_DOC == "RN")
                        {
                            conta.ACCOUNT = cuent.CLEARING.ToString();
                        }
                        if (conp[i].POSTING_KEY == "50" && enca.TIPO_DOC == "SA" && hijo)
                        {
                            conta.ACCOUNT = cuent.CLEARING.ToString();
                        }
                        if (doc.PAIS_ID == "CO" && enca.TIPO_DOC != "SA")
                        {
                            if (taxp.Count > 0)
                            {
                                for (int k = 0; k < taxp.Count; k++)
                                {
                                    conta.RETENCION_ID += taxp[k].RETENCION_ID + ",";
                                }
                                conta.RETENCION_ID = conta.RETENCION_ID.Substring(0, conta.RETENCION_ID.Length - 1);
                            }
                            if (enca.TIPO_SOL == "KG")
                            {
                                conta.ACCOUNT = clien.PROVEEDOR_ID;
                            }
                        }
                        contas.Add(conta);
                    }
                    else
                    {
                        List <DOCUMENTOM> docm = db.DOCUMENTOMs.Where(x => x.NUM_DOC == doc.NUM_DOC).ToList();
                        for (int j = 0; j < docm.Count; j++)
                        {
                            DetalleContab conta = new DetalleContab();
                            conta.POS_TYPE    = conp[i].KEY;
                            conta.COMP_CODE   = doc.SOCIEDAD_ID;
                            conta.BUS_AREA    = conp[i].BUS_AREA;
                            conta.POST_KEY    = conp[i].POSTING_KEY;
                            conta.TEXT        = doc.CONCEPTO;
                            conta.REF_KEY1    = clien.STCD1;
                            conta.REF_KEY3    = clien.NAME1;
                            conta.SALES_ORG   = clien.VKORG;
                            conta.DIST_CHANEL = clien.VTWEG;
                            conta.DIVISION    = clien.SPART;
                            if (enca.TIPO_DOC != "RN" && doc.PAIS_ID != "CO")
                            {
                                conta.CUSTOMER = doc.PAYER_ID;
                                conta.PRODUCT  = docm[j].MATNR;
                                if (conp[i].QUANTITY != null && conp[i].QUANTITY != 0)
                                {
                                    conta.QTY = conp[i].QUANTITY.ToString();
                                }
                                conta.AMOUNT_LC = conp[i].BASE_UNIT;
                                conta.ACCOUNT   = cuent.CARGO.ToString();
                                //conta.BALANCE = (docp[j].MONTO_APOYO * docp[j].VOLUMEN_EST).ToString();

                                //conta.BALANCE = docp[j].APOYO_REAL.ToString();
                                if (enca.TIPO_DOC == "BB" || enca.TIPO_DOC == "DG")
                                {
                                    //conta.BALANCE = docm[j].APOYO_REAL.ToString(); //KCMX notacredito
                                    conta.BALANCE = Conversion(Convert.ToDecimal(docm[j].APOYO_REAL), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                }
                                else if (enca.TIPO_DOC == "SA" && hijo)
                                {
                                    conta.BALANCE = Conversion(Convert.ToDecimal(docm[j].APOYO_REAL), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                }
                                else
                                {
                                    //conta.BALANCE = docm[j].APOYO_EST.ToString(); //KCMX solic
                                    conta.BALANCE = Conversion(Convert.ToDecimal(docm[j].APOYO_EST), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                }
                            }
                            else
                            {
                                //conta.SALES_ORG =
                                //conta.DIST_CHANEL =
                                //conta.DIVISION =
                                conta.CUSTOMER    =
                                    conta.PRODUCT = "";
                                conta.ACCOUNT     = cuent.ABONO.ToString();
                                conta.BALANCE     = Conversion(Convert.ToDecimal(docm[j].APOYO_REAL), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                if (enca.TIPO_DOC == "BB" || enca.TIPO_DOC == "SA")
                                {
                                    if (doc.PAIS_ID == "CO")
                                    {
                                        //conta.SALES_ORG = clien.VKORG;
                                        //conta.DIST_CHANEL = clien.VTWEG;
                                        //conta.DIVISION = clien.SPART;
                                        conta.SALES_DIST = clien.BZIRK;
                                        conta.CUSTOMER   = doc.PAYER_ID;
                                        conta.PRODUCT    = docm[j].MATNR;
                                        //conta.REF_KEY1 = clien.STCD1;
                                        //conta.REF_KEY3 = clien.NAME1;
                                        conta.ACCOUNT = cuent.CARGO.ToString();
                                        if (enca.TIPO_DOC == "SA")
                                        {
                                            conta.BALANCE    = Conversion(Convert.ToDecimal(docm[j].APOYO_EST), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                            conta.ASSIGNMENT = doc.PAYER_ID;
                                        }
                                        if (enca.TIPO_DOC == "BB")
                                        {
                                            conta.BALANCE = Conversion(Convert.ToDecimal(docm[j].APOYO_REAL), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                        }
                                    }
                                }
                                //if (enca.TIPO_DOC != "KG" && doc.PAIS_ID == "CO")
                                //{
                                //    //conta.BALANCE = docm[j].APOYO_EST.ToString();
                                //    conta.BALANCE = Conversion(Convert.ToDecimal(docm[j].APOYO_EST), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                //}
                                if (enca.TIPO_DOC == "KG" && doc.PAIS_ID == "CO")
                                {
                                    //conta.BALANCE = (doc.MONTO_DOC_MD + (doc.MONTO_DOC_MD * tax.PORC / 100)).ToString();
                                    conta.BALANCE  = Conversion(Convert.ToDecimal(doc.MONTO_DOC_MD + (doc.MONTO_DOC_MD * taxh.PORC / 100)), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                    conta.ACCOUNT  = cuent.CLEARING.ToString();
                                    conta.PRODUCT  = docm[j].MATNR;
                                    conta.CUSTOMER = doc.PAYER_ID;
                                }
                                if (enca.TIPO_DOC == "DG" && doc.PAIS_ID == "CO")
                                {
                                    conta.ACCOUNT  = cuent.CARGO.ToString();
                                    conta.BALANCE  = Conversion(Convert.ToDecimal(docm[j].APOYO_REAL), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                    conta.PRODUCT  = docm[j].MATNR;
                                    conta.CUSTOMER = doc.PAYER_ID;
                                    conta.REF_KEY1 = factura;
                                    conta.REF_KEY3 = clien.NAME1;
                                }
                                if (enca.TIPO_DOC == "RN")
                                {
                                    conta.ACCOUNT = cuent.CLEARING.ToString();
                                }
                            }
                            if (enca.TIPO_DOC == "KR" && doc.PAIS_ID == "CO")
                            {
                                if (enca.CALC_TAXT == false)
                                {
                                    conta.TAX_CODE = taxh.IMPUESTO_ID;
                                }
                                conta.ASSIGNMENT = clien.PAYER;
                                conta.PRODUCT    = docm[j].MATNR;
                                conta.CUSTOMER   = doc.PAYER_ID;
                                conta.ACCOUNT    = cuent.CLEARING.ToString();
                            }
                            else
                            {
                                if (enca.CALC_TAXT == false)
                                {
                                    materi   = docm[j].MATNR;
                                    material = db.MATERIALs.Where(x => x.ID == materi).First();
                                    grupos   = conp[i].MATERIALGP.Split('+');
                                    grupo    = grupos.Where(x => x == material.MATERIALGP_ID).FirstOrDefault();
                                    if (String.IsNullOrEmpty(grupo) == false)
                                    {
                                        conta.TAX_CODE = conp[i].TAXCODEGP;
                                    }
                                    else
                                    {
                                        conta.TAX_CODE = conp[i].TAX_CODE;
                                    }
                                }
                            }
                            if (enca.TIPO_DOC == "DG" || enca.TIPO_DOC == "BB")
                            {
                                if (doc.PAIS_ID != "CO")
                                {
                                    conta.REF_KEY1 = conp[i].REF_KEY1;
                                    conta.REF_KEY3 = conp[i].REF_KEY3;
                                }
                            }
                            contas.Add(conta);
                            if (enca.TIPO_DOC == "RN" || enca.TIPO_DOC == "KR" || enca.TIPO_DOC == "KG")
                            {
                                break;
                            }
                        }
                        List <DOCUMENTOP> docp = db.DOCUMENTOPs.Where(x => x.NUM_DOC == doc.NUM_DOC).ToList();
                        for (int j = 0; j < docp.Count; j++)
                        {
                            DetalleContab conta = new DetalleContab();
                            conta.POS_TYPE    = conp[i].KEY;
                            conta.COMP_CODE   = doc.SOCIEDAD_ID;
                            conta.BUS_AREA    = conp[i].BUS_AREA;
                            conta.POST_KEY    = conp[i].POSTING_KEY;
                            conta.TEXT        = doc.CONCEPTO;
                            conta.REF_KEY1    = clien.STCD1;
                            conta.REF_KEY3    = clien.NAME1;
                            conta.SALES_ORG   = clien.VKORG;
                            conta.DIST_CHANEL = clien.VTWEG;
                            conta.DIVISION    = clien.SPART;
                            if (enca.TIPO_DOC != "RN" && doc.PAIS_ID != "CO")
                            {
                                conta.CUSTOMER = doc.PAYER_ID;
                                conta.PRODUCT  = docp[j].MATNR;
                                if (conp[i].QUANTITY != null && conp[i].QUANTITY != 0)
                                {
                                    conta.QTY = conp[i].QUANTITY.ToString();
                                }
                                conta.AMOUNT_LC = conp[i].BASE_UNIT;
                                conta.ACCOUNT   = cuent.CARGO.ToString();
                                //conta.BALANCE = (docp[j].MONTO_APOYO * docp[j].VOLUMEN_EST).ToString();

                                //conta.BALANCE = docp[j].APOYO_REAL.ToString();
                                if (enca.TIPO_DOC == "BB" || enca.TIPO_DOC == "DG")
                                {
                                    //conta.BALANCE = docp[j].APOYO_REAL.ToString(); //KCMX notacredito
                                    conta.BALANCE = Conversion(Convert.ToDecimal(docp[j].APOYO_REAL), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                }
                                else if (enca.TIPO_DOC == "SA" && hijo)
                                {
                                    //conta.BALANCE = docp[j].APOYO_EST.ToString(); //KCMX solic
                                    conta.BALANCE = Conversion(Convert.ToDecimal(docp[j].APOYO_REAL), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                }
                                else
                                {
                                    conta.BALANCE = Conversion(Convert.ToDecimal(docp[j].APOYO_EST), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                }
                            }
                            else
                            {
                                //conta.SALES_ORG =
                                //conta.DIST_CHANEL =
                                //conta.DIVISION =
                                conta.CUSTOMER    =
                                    conta.PRODUCT = "";
                                conta.ACCOUNT     = cuent.ABONO.ToString();
                                conta.BALANCE     = Conversion(Convert.ToDecimal(doc.MONTO_DOC_MD), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                if (enca.TIPO_DOC == "BB" || enca.TIPO_DOC == "SA")
                                {
                                    if (doc.PAIS_ID == "CO")
                                    {
                                        //conta.SALES_ORG = clien.VKORG;
                                        //conta.DIST_CHANEL = clien.VTWEG;
                                        //conta.DIVISION = clien.SPART;
                                        conta.SALES_DIST = clien.BZIRK;
                                        conta.CUSTOMER   = doc.PAYER_ID;
                                        conta.PRODUCT    = docp[j].MATNR;
                                        //conta.REF_KEY1 = clien.STCD1;
                                        //conta.REF_KEY3 = clien.NAME1;
                                        conta.ACCOUNT = cuent.CARGO.ToString();
                                        if (enca.TIPO_DOC == "SA")
                                        {
                                            conta.ASSIGNMENT = doc.PAYER_ID;
                                            conta.BALANCE    = Conversion(Convert.ToDecimal(docp[j].APOYO_EST), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                        }
                                        if (enca.TIPO_DOC == "BB")
                                        {
                                            conta.BALANCE = Conversion(Convert.ToDecimal(docp[j].APOYO_REAL), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                        }
                                    }
                                }
                                //if (enca.TIPO_DOC != "KG" && doc.PAIS_ID == "CO")
                                //{
                                //    //conta.BALANCE = docp[j].APOYO_EST.ToString();
                                //    conta.BALANCE = Conversion(Convert.ToDecimal(docp[j].APOYO_EST), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                //}
                                if (enca.TIPO_DOC == "KG" && doc.PAIS_ID == "CO")
                                {
                                    //conta.BALANCE = (doc.MONTO_DOC_MD + (doc.MONTO_DOC_MD * tax.PORC / 100)).ToString();
                                    conta.BALANCE  = Conversion(Convert.ToDecimal(doc.MONTO_DOC_MD + (doc.MONTO_DOC_MD * taxh.PORC / 100)), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                    conta.ACCOUNT  = cuent.CLEARING.ToString();
                                    conta.PRODUCT  = docp[j].MATNR;
                                    conta.CUSTOMER = doc.PAYER_ID;
                                }
                                if (enca.TIPO_DOC == "DG" && doc.PAIS_ID == "CO")
                                {
                                    conta.ACCOUNT  = cuent.CARGO.ToString();
                                    conta.BALANCE  = Conversion(Convert.ToDecimal(docp[j].APOYO_REAL), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC).ToString();
                                    conta.PRODUCT  = docp[j].MATNR;
                                    conta.CUSTOMER = doc.PAYER_ID;
                                    conta.REF_KEY1 = factura;
                                    conta.REF_KEY3 = clien.NAME1;
                                    //conta.SALES_ORG = clien.VKORG;
                                    //conta.DIST_CHANEL = clien.VTWEG;
                                    //conta.DIVISION = clien.SPART;
                                }
                                if (enca.TIPO_DOC == "RN")
                                {
                                    conta.ACCOUNT = cuent.CLEARING.ToString();
                                }
                            }
                            if (enca.TIPO_DOC == "KR" && doc.PAIS_ID == "CO")
                            {
                                if (enca.CALC_TAXT == false)
                                {
                                    conta.TAX_CODE = taxh.IMPUESTO_ID;
                                }
                                conta.ASSIGNMENT = clien.PAYER;
                                conta.PRODUCT    = docp[j].MATNR;
                                conta.CUSTOMER   = doc.PAYER_ID;
                                conta.ACCOUNT    = cuent.CLEARING.ToString();
                            }
                            else
                            {
                                if (enca.CALC_TAXT == true)
                                {
                                    materi   = docp[j].MATNR;
                                    material = db.MATERIALs.Where(y => y.ID == materi).Single();
                                    grupos   = conp[i].MATERIALGP.Split('+');
                                    grupo    = grupos.Where(x => x == material.MATERIALGP_ID).FirstOrDefault();
                                    if (String.IsNullOrEmpty(grupo) == false)
                                    {
                                        conta.TAX_CODE = conp[i].TAXCODEGP;
                                    }
                                    else
                                    {
                                        conta.TAX_CODE = conp[i].TAX_CODE;
                                    }
                                }
                            }
                            if (enca.TIPO_DOC == "DG" || enca.TIPO_DOC == "BB")
                            {
                                if (doc.PAIS_ID != "CO")
                                {
                                    conta.REF_KEY1 = conp[i].REF_KEY1;
                                    conta.REF_KEY3 = conp[i].REF_KEY3;
                                }
                            }
                            contas.Add(conta);
                            if (enca.TIPO_DOC == "RN" || enca.TIPO_DOC == "KR" || enca.TIPO_DOC == "KG")
                            {
                                break;
                            }
                        }


                        if (enca.TIPO_DOC == "BB" && doc.PAIS_ID == "CO")
                        {
                            DetalleContab conta = new DetalleContab();
                            conta.POS_TYPE    = conp[i].KEY;
                            conta.ACCOUNT     = cuent.CLEARING.ToString();
                            conta.BALANCE     = (Conversion(Convert.ToDecimal(doc.MONTO_DOC_MD + (doc.MONTO_DOC_MD * taxh.PORC / 100)), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC) - Conversion(Convert.ToDecimal(doc.MONTO_DOC_MD), clien.EXPORTACION, Convert.ToDecimal(cambio.UKURS), ref conta.AMOUNT_LC)).ToString();
                            conta.COMP_CODE   = doc.SOCIEDAD_ID;
                            conta.BUS_AREA    = conp[i].BUS_AREA;
                            conta.POST_KEY    = conp[i].POSTING_KEY;
                            conta.TEXT        = doc.CONCEPTO;
                            conta.REF_KEY1    = clien.STCD1;
                            conta.REF_KEY3    = clien.NAME1;
                            conta.CUSTOMER    = doc.PAYER_ID;
                            conta.SALES_ORG   = clien.VKORG;
                            conta.DIST_CHANEL = clien.VTWEG;
                            conta.DIVISION    = clien.SPART;
                            conta.TAX_CODE    = conp[i].TAX_CODE;
                            contas.Add(conta);
                        }
                    }
                }
                return("");
            }
            catch (Exception e)
            {
                return("Error al obtener detalle contable");
            }
        }
Ejemplo n.º 2
0
        public string generarArchivo(decimal docum, decimal relacion)
        {
            try
            {
                string            dirFile = "";
                DOCUMENTO         doc     = db.DOCUMENTOes.Where(x => x.NUM_DOC == docum).Single();
                CONPOSAPH         tab;
                CLIENTE           clien = new CLIENTE();
                List <DOCUMENTOF> docf  = new List <DOCUMENTOF>();
                bool hijo = false;
                try
                {
                    if (relacion == 0)
                    {
                        tab = db.CONPOSAPHs.Where(x => x.TIPO_SOL == doc.TSOL.TSOLC &&
                                                  x.SOCIEDAD == doc.SOCIEDAD_ID &&
                                                  x.FECHA_FINVIG >= doc.FECHAF_VIG &&
                                                  x.FECHA_INIVIG <= DateTime.Today &&
                                                  x.TIPO_DOC != "KG").FirstOrDefault();
                        if (tab == null)
                        {
                            tab = db.CONPOSAPHs.First(x => x.TIPO_SOL == doc.TSOL_ID &&
                                                      x.SOCIEDAD == doc.SOCIEDAD_ID &&
                                                      x.FECHA_FINVIG >= doc.FECHAF_VIG &&
                                                      x.FECHA_INIVIG <= DateTime.Today &&
                                                      x.TIPO_DOC != "KG"
                                                      );
                        }
                    }
                    else
                    {
                        tab = db.CONPOSAPHs.Where(x => x.SOCIEDAD == doc.SOCIEDAD_ID &&
                                                  x.FECHA_FINVIG >= doc.FECHAF_VIG &&
                                                  x.CONSECUTIVO == relacion
                                                  ).Single();
                        hijo = true;
                    }
                }
                catch (Exception)
                {
                    return("No se encontro configuracion para generar documento para este tipo de solicitud");
                }

                string   txt = "";
                string   msj = "";
                string[] cc;
                string   cta = "";
                try
                {
                    clien = db.CLIENTEs.Where(x => x.KUNNR == doc.PAYER_ID).Single();
                }
                catch (Exception) { }
                try
                {
                    docf = db.DOCUMENTOFs.Where(x => x.NUM_DOC == docum).ToList();
                }
                catch (Exception) { }

                if (tab.TIPO_DOC == "RN" || tab.TIPO_DOC == "KR")
                {
                    dirFile = ConfigurationManager.AppSettings["URL_SAVE"] + @"POSTING\INBOUND_" + tab.TIPO_SOL.Substring(0, 2) + docum.ToString().PadLeft(10, '0') + "-2.txt";
                }
                else if (tab.TIPO_DOC == "KG")
                {
                    dirFile = ConfigurationManager.AppSettings["URL_SAVE"] + @"POSTING\INBOUND_" + tab.TIPO_SOL.Substring(0, 2) + docum.ToString().PadLeft(10, '0') + "-3.txt";
                }
                else
                {
                    dirFile = ConfigurationManager.AppSettings["URL_SAVE"] + @"POSTING\INBOUND_" + tab.TIPO_SOL.Substring(0, 2) + docum.ToString().PadLeft(10, '0') + "-1.txt";
                }
                cta         = doc.GALL_ID;
                doc.GALL_ID = db.GALLs.Where(x => x.ID == doc.GALL_ID).Select(x => x.GRUPO_ALL).Single();
                var ppd = doc.GetType().GetProperties();
                tab.HEADER_TEXT = tab.HEADER_TEXT.Trim();
                if (String.IsNullOrEmpty(tab.HEADER_TEXT) == false)
                {
                    tab.HEADER_TEXT = Referencia(tab.HEADER_TEXT, doc, docf, clien);
                }
                else
                {
                    return("Agrege comando para generar texto de encabezado");
                }

                txt            = "";
                tab.REFERENCIA = tab.REFERENCIA.Trim();
                if (String.IsNullOrEmpty(tab.REFERENCIA) == false)
                {
                    tab.REFERENCIA = Referencia(tab.REFERENCIA, doc, docf, clien);
                }
                else
                {
                    return("Agrege comando para generar referencia");
                }
                //tab.REFERENCIA = txt;
                tab.NOTA = tab.NOTA.Trim();
                if (String.IsNullOrEmpty(tab.NOTA) == false)
                {
                    tab.NOTA = Referencia(tab.NOTA, doc, docf, clien);
                }
                tab.CORRESPONDENCIA = tab.CORRESPONDENCIA.Trim();
                if (String.IsNullOrEmpty(tab.CORRESPONDENCIA) == false)
                {
                    tab.CORRESPONDENCIA = Referencia(tab.CORRESPONDENCIA, doc, docf, clien);
                }
                doc.GALL_ID = cta;
                if (String.IsNullOrEmpty(tab.MONEDA))
                {
                    doc.MONEDA_ID = "";
                }

                doc.FECHAC = Fecha(tab.FECHA_CONTAB, Convert.ToDateTime(doc.FECHAC));

                List <DetalleContab> det = new List <DetalleContab>();
                msj = Detalle(doc, ref det, tab, docf, hijo);

                if (msj != "")
                {
                    return(msj);
                }
                if (String.IsNullOrEmpty(clien.EXPORTACION) == false)
                {
                    doc.MONEDA_ID = "USD";
                }
                using (StreamWriter sw = new StreamWriter(dirFile))
                {
                    CONPOSAPH dir = tab;
                    sw.WriteLine(
                        tab.TIPO_DOC + "|" +
                        dir.SOCIEDAD.Trim() + "|"
                        + String.Format("{0:MM.dd.yyyy}", doc.FECHAC).Replace(".", "") + "|"
                        + doc.MONEDA_ID.Trim() + "|"
                        + dir.HEADER_TEXT.Trim() + "|"
                        + dir.REFERENCIA.Trim() + "|"
                        + dir.CALC_TAXT.ToString().Replace("True", "X").Replace("False", "") + "|"
                        + dir.NOTA.Trim() + "|"
                        + dir.CORRESPONDENCIA.Trim()
                        );
                    sw.WriteLine("");
                    for (int i = 0; i < det.Count; i++)
                    {
                        sw.WriteLine(
                            det[i].POS_TYPE + "|" +
                            det[i].COMP_CODE + "|" +
                            det[i].BUS_AREA + "|" +
                            det[i].POST_KEY + "|" +
                            det[i].ACCOUNT + "|" +
                            det[i].COST_CENTER + "|" +
                            det[i].BALANCE + "|" +
                            det[i].TEXT + "|" +
                            det[i].SALES_ORG + "|" +
                            det[i].DIST_CHANEL + "|" +
                            det[i].DIVISION + "|" +
                            //"|" +
                            //"|" +
                            //"|" +
                            //"|" +
                            //"|" +
                            det[i].INV_REF + "|" +
                            det[i].PAY_TERM + "|" +
                            det[i].JURIS_CODE + "|" +
                            //"|" +
                            det[i].CUSTOMER + "|" +
                            det[i].PRODUCT + "|" +
                            det[i].TAX_CODE + "|" +
                            det[i].PLANT + "|" +
                            det[i].REF_KEY1 + "|" +
                            det[i].REF_KEY3 + "|" +
                            det[i].ASSIGNMENT + "|" +
                            det[i].QTY + "|" +
                            det[i].BASE_UNIT + "|" +
                            det[i].AMOUNT_LC + "|" +
                            det[i].RETENCION_ID + "|"
                            );
                    }
                    sw.Close();
                }
                if (tab.RELACION != 0 && tab.RELACION != null)
                {
                    return(generarArchivo(docum, Convert.ToInt32(tab.RELACION)));
                }
                else
                {
                    return("");
                }
            }
            catch (Exception e)
            {
                return("Error al generar el documento contable " + e.Message);
            }
        }