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 +4 -4
- data/CHANGELOG.txt +10 -0
- data/Gemfile +0 -1
- data/facturacion_electronica.gemspec +0 -1
- data/lib/facturacion_electronica.rb +19 -2
- data/lib/facturacion_electronica/version.rb +1 -1
- data/lib/services/pac_provider_fm.rb +32 -12
- data/lib/services/pac_provider_service.rb +2 -1
- data/spec/lib/facturacion_electronica_spec.rb +84 -1
- data/spec/lib/services/pac_provider_fm_spec.rb +1 -1
- data/spec/lib/services/pac_provider_service_spec.rb +1 -1
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20a4faca441ee0a8c92482782ce25a2c24fdfdab
|
4
|
+
data.tar.gz: e58c3a98b6a0dc0cfe9ddfb4a50ac79ffab7bc49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e36cebe24b28af942eeb81369d23e2c85eb5e068c9ab9beed52dceda6abf6de9689d2c2d98e6e12dd8e6902f36826c75e0132e2003f1740ce073828476a1d05
|
7
|
+
data.tar.gz: 3c2cbc62b5b11692b73c918f77b20f182b37a8f7df7369fe65ae0faffd1d53041bcfc9d6ad8acc8fcf0fa57d832bc028984f71040639ed5edbb3f8c2aa7a9c93
|
data/CHANGELOG.txt
ADDED
data/Gemfile
CHANGED
@@ -3,19 +3,31 @@ require 'services/pac_provider_fm'
|
|
3
3
|
require 'bill_xml_request'
|
4
4
|
|
5
5
|
module FacturacionElectronica
|
6
|
-
PACS = {
|
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 =
|
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
|
@@ -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
|
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:
|
17
|
-
stamp:
|
18
|
-
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
|
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
|
@@ -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
|
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:
|
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
|