asseinfo/br_danfe

View on GitHub
lib/br_danfe/danfe_lib/nfe_lib/xprod.rb

Summary

Maintainability
A
1 hr
Test Coverage
A
100%
module BrDanfe
  module DanfeLib
    module NfeLib
      class Xprod
        def initialize(det)
          @det = det
        end

        def render
          xprod = @det.css('prod/xProd').text.to_s

          xprod += infAdProd if infAdProd?
          xprod += fci if fci?
          xprod += icms_st if icms_st?
          xprod += fcp if fcp?
          xprod += fcp_st if fcp_st?
          xprod += add_icms_st_ret_to_product

          xprod
        end

        private

        def infAdProd
          "\n#{@det.css('infAdProd').text}"
        end

        def infAdProd?
          !@det.css('infAdProd').text.empty?
        end

        def fci
          "\n#{I18n.t('danfe.det.prod.xProdFCI',
                      nFCI: @det.css('prod/nFCI').text)}"
        end

        def fci?
          !@det.css('prod/nFCI').text.empty?
        end

        def icms_st
          "\n#{I18n.t('danfe.det.prod.xProdST',
                      pMVAST: BrDanfe::Helper.numerify(@det.css('ICMS/*/pMVAST').text),
                      pICMSST: BrDanfe::Helper.numerify(@det.css('ICMS/*/pICMSST').text),
                      vBCST: BrDanfe::Helper.numerify(@det.css('ICMS/*/vBCST').text),
                      vICMSST: BrDanfe::Helper.numerify(@det.css('ICMS/*/vICMSST').text))}"
        end

        def icms_st?
          @det.css('ICMS/*/vBCST').text.to_f.positive?
        end

        def fcp?
          @det.css('ICMS/*/vFCP').text.to_f.positive?
        end

        def fcp
          icms00? ? fcp_for_icms00 : fcp_complete
        end

        def icms00?
          @det.at_css('ICMS00')
        end

        def fcp_for_icms00
          "\n#{I18n.t('danfe.det.prod.xProdFCPICMS00',
                      vFCP: BrDanfe::Helper.numerify(@det.css('ICMS00/vFCP').text),
                      pFCP: BrDanfe::Helper.numerify(@det.css('ICMS00/pFCP').text))}"
        end

        def fcp_complete
          "\n#{I18n.t('danfe.det.prod.xProdFCP',
                      vBCFCP: BrDanfe::Helper.numerify(@det.css('ICMS/*/vBCFCP').text),
                      vFCP: BrDanfe::Helper.numerify(@det.css('ICMS/*/vFCP').text),
                      pFCP: BrDanfe::Helper.numerify(@det.css('ICMS/*/pFCP').text))}"
        end

        def fcp_st?
          @det.css('ICMS/*/vFCPST').text.to_f.positive?
        end

        def fcp_st
          "\n#{I18n.t('danfe.det.prod.xProdFCPST',
                      vBCFCPST: BrDanfe::Helper.numerify(@det.css('ICMS/*/vBCFCPST').text),
                      pFCPST: BrDanfe::Helper.numerify(@det.css('ICMS/*/pFCPST').text),
                      vFCPST: BrDanfe::Helper.numerify(@det.css('ICMS/*/vFCPST').text))}"
        end

        def add_icms_st_ret_to_product
          icms_st_ret? ? icms_st_ret : ''
        end

        def icms_st_ret?
          @det.css('ICMS/*/vBCSTRet').text.to_f.positive? || @det.css('ICMS/*/vICMSSTRet').text.to_f.positive? ||
            @det.css('ICMS/*/pST').text.to_f.positive?
        end

        def icms_st_ret
          "\n#{I18n.t(
            'danfe.det.prod.xProdSTRet',
            vBCSTRet: BrDanfe::Helper.numerify(@det.css('ICMS/*/vBCSTRet').text),
            vICMSSTRet: BrDanfe::Helper.numerify(@det.css('ICMS/*/vICMSSTRet').text),
            pST: BrDanfe::Helper.numerify(@det.css('ICMS/*/pST').text)
          )}"
        end
      end
    end
  end
end