Example #1
0
        /// <summary>
        /// Convert de Enum para String Enumerada
        /// </summary>
        /// <param name="pTcdType">Tipo da Deteminação</param>
        /// <returns>Uma string com o valor do enum no formato de um string</returns>
        public static string ToStrEnum(this TcdTypeEnum pTcdType)
        {
            switch (pTcdType)
            {
            case TcdTypeEnum.ServiceItem:
                return("SI");

            case TcdTypeEnum.ServiceDocument:
                return("SD");

            case TcdTypeEnum.WithholdingTax:
                return("WT");

            case TcdTypeEnum.MaterialItem:
            default:
                return("MI");
            }
        }
        /// <summary>
        /// Pega o código de imposto conforme a determinação do SAP
        /// </summary>
        /// <param name="pUsage">Utilização</param>
        /// <param name="pCardCode">Código do Cliente</param>
        /// <param name="pItemCode">Código do item</param>
        /// <param name="pTdcType">Tipo de Determinação de Código de Imposto</param>
        /// <returns>True se encontrar a determinação</returns>
        public bool GetTaxCode(Int32 pUsage, string pCardCode, string pItemCode, TcdTypeEnum pTdcType)
        {
            var conn = Connection.Instance;

            this.Usage    = pUsage;
            this.ItemCode = pItemCode;

            var query = new StringBuilder();

            query.AppendLine(" Select");
            query.AppendLine("        T1.Priority,");
            query.AppendLine("        T1.AbsId,");
            query.AppendLine("        Keyfld_1 = IsNull(T1.Keyfld_1,0),");
            query.AppendLine("        Keyfld_2 = IsNull(T1.Keyfld_2,0),");
            query.AppendLine("        Keyfld_3 = IsNull(T1.Keyfld_3,0) ");
            query.AppendLine(" From ");
            query.AppendFormat("       [{0}]..OTCD T With (NOLOCK), ", this.CompanyDb);
            query.AppendFormat("       [{0}]..TCD1 T1 With (NOLOCK)", this.CompanyDb);
            query.AppendLine(" Where      ");
            query.AppendFormat("        T.TcdType = '{0}' \n", pTdcType.ToStrEnum());
            query.AppendLine("    And T1.TcdId=T.AbsId");
            query.AppendLine("        Order by T1.Priority");

            var keyFields = conn.SqlServerQuery(query.ToString());

            foreach (DataRow row in keyFields.Rows)
            {
                var keyField1 = GetKeyField(pCardCode, pItemCode, row.Field <Int32>("Keyfld_1"));
                var keyField2 = GetKeyField(pCardCode, pItemCode, row.Field <Int32>("Keyfld_2"));
                var keyField3 = GetKeyField(pCardCode, pItemCode, row.Field <Int32>("Keyfld_3"));

                query = new StringBuilder();
                query.AppendLine(" Select");
                query.AppendLine("      T2.AbsId");
                query.AppendLine(" From ");
                query.AppendFormat("       [{0}]..TCD2 T2 With (NOLOCK) \n", this.CompanyDb);
                query.AppendLine(" Where ");
                query.AppendFormat("       IsNull(T2.KeyFld_1_V,0)=IsNull('{0}',0)", keyField1);
                query.AppendFormat("   and IsNull(T2.KeyFld_2_V,0)=IsNull('{0}',0)", keyField2);
                query.AppendFormat("   and IsNull(T2.KeyFld_3_V,0)=IsNull('{0}',0)", keyField3);
                query.AppendFormat("   and T2.Tcd1Id = {0} ", row.Field <Int32>("AbsId"));

                var absID = conn.SqlExecuteScalar <Int32>(query.ToString());

                if (absID != 0)
                {
                    query = new StringBuilder();

                    switch (pTdcType)
                    {
                    case TcdTypeEnum.MaterialItem:
                        query.AppendLine(" Select");
                        query.AppendLine("        T5.TaxCode,");
                        query.AppendLine("        T5.ExpTaxCode ");
                        query.AppendLine(" From ");
                        query.AppendFormat("        [{0}]..TCD3 T3 With (NOLOCK),", this.CompanyDb);
                        query.AppendFormat("        [{0}]..TCD5 T5 With (NOLOCK)", this.CompanyDb);
                        query.AppendLine(" Where ");
                        query.AppendFormat("          T3.Tcd2Id = {0}", absID);
                        query.AppendLine("      and T5.Tcd3Id = T3.AbsId ");
                        query.AppendFormat("      and T5.UsageCode= {0}", pUsage);
                        query.AppendFormat("      and T3.EfctFrom in (Select T0.EfctFrom from [{0}]..TCD3 T0 Where T0.tcd2id={1} ",
                                           this.CompanyDb, absID);
                        query.AppendLine(" And datediff(d,T0.EfctFrom,GetDate()) >= 0 ");
                        query.AppendLine(" And datediff(d,IsNull(T0.EfctTo,GetDate()),GetDate()) <= 0 )");

                        break;

                    case TcdTypeEnum.ServiceItem:
                        query.AppendLine(" Select");
                        query.AppendLine("        T0.TaxCode, ");
                        query.AppendLine("        ExpTaxCode = ''");
                        query.AppendLine(" From ");
                        query.AppendFormat("        [{0}]..TCD3 T0 With (NOLOCK) ", this.CompanyDb);
                        query.AppendLine(" Where ");
                        query.AppendFormat("            T0.Tcd2Id = {0}", absID);
                        query.AppendFormat("          And datediff(d,T0.EfctFrom,GetDate()) >= 0 ");
                        query.AppendFormat("          And datediff(d,IsNull(T0.EfctTo,GetDate()),GetDate()) <= 0");
                        break;

                    default:
                        throw new Exception("Tipo de Determinação não suportado.");
                    }

                    var taxCode = conn.SqlServerQuery(query.ToString()).AsEnumerable().SingleOrDefault();

                    if (taxCode != null)
                    {
                        this.TaxCode        = taxCode.Field <String>("TaxCode");
                        this.ExpenseTaxCode = taxCode.Field <String>("ExpTaxCode");
                        return(true);
                    }
                }
            }

            //Se não achou nenhum imposto pega o padrão
            query = new System.Text.StringBuilder();

            switch (pTdcType)
            {
            case TcdTypeEnum.MaterialItem:
                query.AppendLine(" Select");
                query.AppendLine("        T5.TaxCode,");
                query.AppendLine("        T5.ExpTaxCode ");
                query.AppendLine(" From ");
                query.AppendFormat("        [{0}]..TCD5 T5 With (NOLOCK)\n", this.CompanyDb);
                query.AppendLine(" Where ");
                query.AppendLine("          T5.Tcd3Id Is Null ");
                query.AppendFormat("      and T5.UsageCode = {0}\n", pUsage);
                query.AppendFormat("      and Type = '{0}'",
                                   this.TransType == eTransactionType.oIn ? "P" : "R");

                var taxCodeDefault = conn.SqlServerQuery(query.ToString()).AsEnumerable().FirstOrDefault();

                if (taxCodeDefault != null)
                {
                    this.TaxCode        = taxCodeDefault.Field <String>("TaxCode");
                    this.ExpenseTaxCode = taxCodeDefault.Field <String>("ExpTaxCode");
                    return(true);
                }

                break;

            case TcdTypeEnum.ServiceItem:
                query.AppendLine(" Select");
                query.AppendLine("        T1.DftArCode,");
                query.AppendLine("        T1.DftApCode");
                query.AppendLine(" From ");
                query.AppendFormat("       [{0}]..OTCD T1 With (NOLOCK) ", this.CompanyDb);
                query.AppendLine(" Where      ");
                query.AppendFormat("        T1.TcdType = '{0}' \n", pTdcType.ToStrEnum());

                var taxCodeDefaults = conn.SqlServerQuery(query.ToString()).AsEnumerable().FirstOrDefault();

                if (taxCodeDefaults != null)
                {
                    this.TaxCode = this.TransType == eTransactionType.oIn ?
                                   taxCodeDefaults.Field <String>("DftApCode") : taxCodeDefaults.Field <String>("DftArCode");

                    return(true);
                }

                break;

            default:
                throw new Exception("Tipo de Determinação não suportado.");
            }

            return(false);
        }