facturacion_electronica 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f6e8f8ea64af9c7e6b657ce3245cac4c94a0123
4
- data.tar.gz: a787b7daefc42b5fc3d6217cb9d6b43be6050303
3
+ metadata.gz: 20a4faca441ee0a8c92482782ce25a2c24fdfdab
4
+ data.tar.gz: e58c3a98b6a0dc0cfe9ddfb4a50ac79ffab7bc49
5
5
  SHA512:
6
- metadata.gz: aa03bb42fd867ed8c53e3e54feaf0ddb7e4d9ba3dac1624660aadc7c56d88eeb260ad875e52e6f22850e8296f42da92015b89dfd50fe2259869113555ed90252
7
- data.tar.gz: 86c27941ab92f14a8bc035f11495a6a01637d169ff0bbdacf3f1f9ff182f82aac06e8da7028262e275052233e0945f49814bdcc76a68635cae9f5f3689734c0e
6
+ metadata.gz: 6e36cebe24b28af942eeb81369d23e2c85eb5e068c9ab9beed52dceda6abf6de9689d2c2d98e6e12dd8e6902f36826c75e0132e2003f1740ce073828476a1d05
7
+ data.tar.gz: 3c2cbc62b5b11692b73c918f77b20f182b37a8f7df7369fe65ae0faffd1d53041bcfc9d6ad8acc8fcf0fa57d832bc028984f71040639ed5edbb3f8c2aa7a9c93
data/CHANGELOG.txt ADDED
@@ -0,0 +1,10 @@
1
+ VERSION 0.1.0
2
+ =============
3
+ * Manage errors responses
4
+ * Add ability to cancel CFDI
5
+ * Add ability to register user's RFC
6
+ * Update fm_timbrado_cfdi gem
7
+
8
+ VERSION 0.0.1
9
+ =============
10
+ * Ringing CFDI through PAC FacturacionModerna(FM) webservice
data/Gemfile CHANGED
@@ -3,5 +3,4 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in facturacion_electronica.gemspec
4
4
  gemspec
5
5
 
6
- gem 'nokogiri', '< 1.6', '>= 1.4.0'
7
6
  gem 'fm_timbrado_cfdi', git: 'git@github.com:crowdint/fm_timbrado_cfdi.git'
@@ -19,7 +19,6 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency 'cfdi'
22
- spec.add_dependency 'fm_timbrado_cfdi'
23
22
 
24
23
  spec.add_development_dependency "bundler", "~> 1.3"
25
24
  spec.add_development_dependency "rake"
@@ -3,19 +3,31 @@ require 'services/pac_provider_fm'
3
3
  require 'bill_xml_request'
4
4
 
5
5
  module FacturacionElectronica
6
- PACS = { :'FacturacionModerna' => PacProviderFM }
6
+ PACS = { 'FacturacionModerna' => PacProviderFM }
7
+
8
+ def self.cancel_cfdi request
9
+ pac_service = choose_service(request[:pac_provider], '', request[:user_keys])
10
+ pac_service.cancel request[:user_keys],
11
+ request[:biller][:rfc],
12
+ request[:uuid]
13
+ end
7
14
 
8
15
  def self.create_cfdi request
9
16
  if valid_params?(request)
10
17
  new_xml_request = (BillXmlRequest.new_xml request[:biller],
11
18
  request[:bill]).generate_xml_request
12
- pac_service = PacProviderFM.new new_xml_request
19
+ pac_service = choose_service(request[:pac_provider], new_xml_request, request[:user_keys])
13
20
  pac_service.rining request[:user_keys]
14
21
  else
15
22
  { status: false, error_msg: 'Parametros invalidos' }
16
23
  end
17
24
  end
18
25
 
26
+ def self.register_rfc request
27
+ pac_service = choose_service(request[:pac_provider], '', request[:user_keys])
28
+ pac_service.enable_rfc request[:user_keys], request[:biller]
29
+ end
30
+
19
31
  private
20
32
 
21
33
  class << self
@@ -30,5 +42,10 @@ module FacturacionElectronica
30
42
  def is_valid? param_value
31
43
  !param_value.empty?
32
44
  end
45
+
46
+ def choose_service(pac_provider, xml_request, user_keys)
47
+ PACS[pac_provider].new xml_request, user_keys
48
+ end
33
49
  end
50
+
34
51
  end
@@ -1,3 +1,3 @@
1
1
  module FacturacionElectronica
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -3,8 +3,22 @@ require 'fm_timbrado_cfdi'
3
3
 
4
4
  class PacProviderFM < PacProviderService
5
5
 
6
+ def cancel user_keys, rfc, uuid
7
+ config_client
8
+ response = FmTimbradoCfdi.cancelar rfc, uuid
9
+ response.valid? || return_error_message(Nokogiri::XML(response.error))
10
+ end
11
+
12
+ def enable_rfc user_keys, request
13
+ config_client
14
+ response = FmTimbradoCfdi.subir_certificado request[:rfc],
15
+ request[:certificate], request[:key],
16
+ request[:password]
17
+ response.valid? || return_error_message(Nokogiri::XML(response.error))
18
+ end
19
+
6
20
  def rining user_keys
7
- config_client user_keys
21
+ config_client
8
22
  response = FmTimbradoCfdi.timbra_cfdi_xml(@tax_receipt_xml, true)
9
23
  parse response
10
24
  end
@@ -13,22 +27,28 @@ class PacProviderFM < PacProviderService
13
27
 
14
28
  def parse response
15
29
  { status: response.valid?,
16
- xml: response.xml,
17
- stamp: response.timbre || '',
18
- pdf: response.pdf || ''
30
+ xml: response.xml,
31
+ stamp: response.timbre || '',
32
+ pdf: response.pdf || '',
33
+ cbb: response.cbb || '',
34
+ errors: response.errors
19
35
  }
20
36
  end
21
37
 
22
- def config_client user_keys
38
+ def config_client
23
39
  FmTimbradoCfdi.configurar do |config|
24
- config.user_id = user_keys[:id]
25
- config.user_pass = user_keys[:password]
26
- config.namespace = user_keys[:namespace]
27
- config.endpoint = user_keys[:endpoint]
28
- config.fm_wsdl = user_keys[:wsdl]
29
- config.log = user_keys[:log]
30
- config.ssl_verify_mode = user_keys[:ssl_verify_mode]
40
+ config.user_id = @user_keys[:id]
41
+ config.user_pass = @user_keys[:password]
42
+ config.namespace = @user_keys[:namespace]
43
+ config.endpoint = @user_keys[:endpoint]
44
+ config.fm_wsdl = @user_keys[:wsdl]
45
+ config.log = @user_keys[:log]
46
+ config.ssl_verify_mode = @user_keys[:ssl_verify_mode]
31
47
  end
32
48
  end
33
49
 
50
+ def return_error_message xml
51
+ xml.xpath('//faultstring').text()
52
+ end
53
+
34
54
  end
@@ -1,7 +1,8 @@
1
1
  class PacProviderService
2
2
  attr_accessor :tax_receipt_xml
3
3
 
4
- def initialize tax_receipt_xml
4
+ def initialize tax_receipt_xml, user_keys
5
5
  @tax_receipt_xml = tax_receipt_xml
6
+ @user_keys = user_keys
6
7
  end
7
8
  end
@@ -16,7 +16,8 @@ describe FacturacionElectronica do
16
16
  {
17
17
  certificate: File.open('./spec/docs_examples/CertificadosDemo-FM/TUMG620310R95/TUMG620310R95_1210241209S.cer'),
18
18
  key: File.open('spec/docs_examples/CertificadosDemo-FM/TUMG620310R95/TUMG620310R95_1210241209S.key.pem'),
19
- password: '12345678a'
19
+ password: '12345678a',
20
+ rfc: 'TUMG620310R95'
20
21
  }
21
22
  end
22
23
  let(:pac_provider){ 'FacturacionModerna' }
@@ -24,6 +25,41 @@ describe FacturacionElectronica do
24
25
  BillExample.request
25
26
  end
26
27
 
28
+ describe '.cancel_cfdi' do
29
+ context 'When request to cancel a previus cfdi' do
30
+ let(:request) do
31
+ { user_keys: user_keys,
32
+ pac_provider: pac_provider,
33
+ biller: biller,
34
+ uuid: 'AA234BB' }
35
+ end
36
+
37
+ context 'with a valid uuid' do
38
+ before do
39
+ valid_cfdi = subject.create_cfdi({
40
+ user_keys: user_keys,
41
+ pac_provider: pac_provider,
42
+ biller: biller,
43
+ bill: bill})
44
+ xml = Nokogiri::XML valid_cfdi[:xml]
45
+ uuid = xml.xpath('//tfd:TimbreFiscalDigital', 'tfd' => 'http://www.sat.gob.mx/TimbreFiscalDigital').attr('UUID').value
46
+ request[:uuid] = uuid
47
+ end
48
+
49
+ it 'successfully canceled' do
50
+ expect(subject.cancel_cfdi(request)).to be_true
51
+ end
52
+ end
53
+
54
+ context 'with an invalid uuid' do
55
+ let(:error_message){ 'Formato Incorrecto de UUID.' }
56
+ it 'returns an error mesage' do
57
+ expect(subject.cancel_cfdi(request)).to eql(error_message)
58
+ end
59
+ end
60
+ end
61
+ end
62
+
27
63
  describe '.create_cfdi' do
28
64
  context 'When request for new cfdi with valid information' do
29
65
  before do
@@ -200,4 +236,51 @@ describe FacturacionElectronica do
200
236
  end
201
237
  end
202
238
  end
239
+
240
+ describe '.register_rfc' do
241
+ context 'When activate a new rfc' do
242
+ context 'with valid keys' do
243
+ let(:biller) do
244
+ {
245
+ certificate: File.read('./spec/docs_examples/CertificadosDemo-FM/TUMG620310R95/TUMG620310R95_1210241209S.cer'),
246
+ key: File.read('./spec/docs_examples/CertificadosDemo-FM/TUMG620310R95/TUMG620310R95_1210241209S.key'),
247
+ password: '12345678a',
248
+ rfc: 'TUMG620310R95'
249
+ }
250
+ end
251
+ let(:request) do
252
+ { user_keys: user_keys,
253
+ pac_provider: pac_provider,
254
+ biller: biller,
255
+ }
256
+ end
257
+
258
+ it 'returns a valid response' do
259
+ expect(subject.register_rfc(request)).to be_true
260
+ end
261
+ end
262
+
263
+ context 'with invalid keys' do
264
+ let(:biller) do
265
+ {
266
+ certificate: File.read('./spec/docs_examples/CertificadosDemo-FM/TUMG620310R95/TUMG620310R95_1210241209S.cer'),
267
+ key: File.read('./spec/docs_examples/CertificadosDemo-FM/TUMG620310R95/TUMG620310R95_1210241209S.key'),
268
+ password: '12345678b',
269
+ rfc: 'TUMG620310R95'
270
+ }
271
+ end
272
+ let(:request) do
273
+ { user_keys: user_keys,
274
+ pac_provider: pac_provider,
275
+ biller: biller,
276
+ }
277
+ end
278
+ let(:error_message){ 'Contrasenia de la clave privada invalida.' }
279
+
280
+ it 'returns an error message' do
281
+ expect(subject.register_rfc(request)).to eql(error_message)
282
+ end
283
+ end
284
+ end
285
+ end
203
286
  end
@@ -27,7 +27,7 @@ describe PacProviderFM do
27
27
  BillXmlRequest.new_xml(biller, bill).generate_xml_request
28
28
  end
29
29
 
30
- subject{ PacProviderFM.new xml_file }
30
+ subject{ PacProviderFM.new xml_file, user_keys }
31
31
 
32
32
  describe '#rining' do
33
33
  context 'When requesting a valid xml file with valid user keys' do
@@ -5,7 +5,7 @@ describe PacProviderService do
5
5
  xml = File.open './spec/docs_examples/base_xml_file.xml'
6
6
  xml.read
7
7
  end
8
- subject{ PacProviderService.new xml_file }
8
+ subject{ PacProviderService.new xml_file, {} }
9
9
  describe '#tax_receipt_xml' do
10
10
  specify do
11
11
  expect(subject.tax_receipt_xml).to include('cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: facturacion_electronica
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ulices Barajas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-29 00:00:00.000000000 Z
11
+ date: 2014-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cfdi
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: fm_timbrado_cfdi
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -88,6 +74,7 @@ extensions: []
88
74
  extra_rdoc_files: []
89
75
  files:
90
76
  - .gitignore
77
+ - CHANGELOG.txt
91
78
  - Gemfile
92
79
  - LICENSE.txt
93
80
  - README.md