facturacion_electronica 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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