├── Block
├── Create.php
├── Customer.php
├── Order.php
└── Url.php
├── Controller
├── Adminhtml
│ └── Search
│ │ └── Index.php
└── Search
│ └── Index.php
├── Helper
└── Api.php
├── README.md
├── catalog-info.yaml
├── composer.json
├── etc
├── adminhtml
│ ├── routes.xml
│ └── system.xml
├── config.xml
├── frontend
│ └── routes.xml
└── module.xml
├── manual-de-configuracoes.md
├── registration.php
└── view
├── adminhtml
├── layout
│ ├── customer_index_edit.xml
│ └── sales_order_create_index.xml
├── templates
│ ├── order.phtml
│ └── url.phtml
└── ui_component
│ └── customer_form.xml
├── base
└── web
│ └── js
│ └── form
│ └── element
│ └── post-code.js
└── frontend
├── layout
├── checkout_index_index.xml
├── customer_account_create.xml
└── customer_address_form.xml
└── templates
├── create.phtml
├── customer.phtml
├── order.phtml
└── url.phtml
/Block/Create.php:
--------------------------------------------------------------------------------
1 |
6 | */
7 |
8 | namespace Intelipost\Autocomplete\Block;
9 |
10 | class Create extends \Magento\Framework\View\Element\Template
11 | {
12 |
13 | protected $_scopeConfig;
14 |
15 | public function __construct(
16 | \Magento\Framework\View\Element\Template\Context $context,
17 | \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
18 | )
19 | {
20 | $this->setTemplate('create.phtml');
21 |
22 | parent::__construct($context);
23 | $this->_scopeConfig = $scopeConfig;
24 | }
25 |
26 | public function getLoadPageTime()
27 | {
28 | return $this->_scopeConfig->getValue('intelipost_autocomplete/settings/load_page_time');
29 | }
30 |
31 | public function getCustomState()
32 | {
33 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer_create/create_custom_state');
34 | }
35 |
36 | public function getCustomCity()
37 | {
38 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer_create/create_custom_city');
39 | }
40 |
41 | public function getCustomStreet()
42 | {
43 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer_create/create_custom_street');
44 | }
45 |
46 | public function getCustomQuarter()
47 | {
48 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer_create/create_custom_quarter');
49 | }
50 |
51 | public function getCustomAdditionalInfo()
52 | {
53 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer_create/create_custom_additional_info');
54 | }
55 |
56 | }
--------------------------------------------------------------------------------
/Block/Customer.php:
--------------------------------------------------------------------------------
1 |
6 | */
7 |
8 | namespace Intelipost\Autocomplete\Block;
9 |
10 | class Customer extends \Magento\Framework\View\Element\Template
11 | {
12 |
13 | protected $_scopeConfig;
14 |
15 | public function __construct(
16 | \Magento\Framework\View\Element\Template\Context $context,
17 | \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
18 | )
19 | {
20 | $this->setTemplate('customer.phtml');
21 |
22 | parent::__construct($context);
23 | $this->_scopeConfig = $scopeConfig;
24 | }
25 |
26 | public function getLoadPageTime()
27 | {
28 | return $this->_scopeConfig->getValue('intelipost_autocomplete/settings/load_page_time');
29 | }
30 |
31 | public function getCustomState()
32 | {
33 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer/custom_state');
34 | }
35 |
36 | public function getCustomCity()
37 | {
38 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer/custom_city');
39 | }
40 |
41 | public function getCustomStreet()
42 | {
43 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer/custom_street');
44 | }
45 |
46 | public function getCustomQuarter()
47 | {
48 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer/custom_quarter');
49 | }
50 |
51 | public function getCustomAdditionalInfo()
52 | {
53 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_customer/custom_additional_info');
54 | }
55 |
56 | }
--------------------------------------------------------------------------------
/Block/Order.php:
--------------------------------------------------------------------------------
1 |
6 | */
7 |
8 | namespace Intelipost\Autocomplete\Block;
9 |
10 | class Order extends \Magento\Framework\View\Element\Template
11 | {
12 |
13 | protected $_scopeConfig;
14 |
15 | public function __construct(
16 | \Magento\Framework\View\Element\Template\Context $context,
17 | \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
18 | )
19 | {
20 | $this->setTemplate('order.phtml');
21 |
22 | parent::__construct($context);
23 | $this->_scopeConfig = $scopeConfig;
24 | }
25 |
26 | public function getLoadPageTime()
27 | {
28 | $time = $this->_scopeConfig->getValue('intelipost_autocomplete/settings/load_page_time');
29 | return $time;
30 | }
31 |
32 | public function getCustomState()
33 | {
34 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_checkout/checkout_custom_state');
35 | }
36 |
37 | public function getCustomCity()
38 | {
39 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_checkout/checkout_custom_city');
40 | }
41 |
42 | public function getCustomStreet()
43 | {
44 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_checkout/checkout_custom_street');
45 | }
46 |
47 | public function getCustomQuarter()
48 | {
49 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_checkout/checkout_custom_quarter');
50 | }
51 |
52 | public function getCustomAdditionalInfo()
53 | {
54 | return $this->_scopeConfig->getValue('intelipost_autocomplete/custom_fields_checkout/checkout_custom_additional_info');
55 | }
56 |
57 | }
58 |
59 |
--------------------------------------------------------------------------------
/Block/Url.php:
--------------------------------------------------------------------------------
1 |
6 | */
7 |
8 | namespace Intelipost\Autocomplete\Block;
9 |
10 | class Url extends \Magento\Framework\View\Element\Template
11 | {
12 |
13 | public function __construct(
14 | \Magento\Framework\View\Element\Template\Context $context
15 | )
16 | {
17 | $this->setTemplate('url.phtml');
18 |
19 | parent::__construct($context);
20 | }
21 |
22 | public function getAjaxUrl()
23 | {
24 | return $this->getUrl('intelipost_autocomplete/search/index');
25 | }
26 |
27 | }
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Controller/Adminhtml/Search/Index.php:
--------------------------------------------------------------------------------
1 |
6 | */
7 |
8 | namespace Intelipost\Autocomplete\Controller\Adminhtml\Search;
9 |
10 | class Index extends \Magento\Framework\App\Action\Action
11 | {
12 |
13 | protected $_autocompleteHelper;
14 |
15 | public function __construct(
16 | \Magento\Framework\App\Action\Context $context,
17 | \Intelipost\Autocomplete\Helper\Api $autocompleteHelper
18 | )
19 | {
20 | $this->_autocompleteHelper = $autocompleteHelper;
21 |
22 | parent::__construct ($context);
23 | }
24 |
25 | public function execute()
26 | {
27 | $postcode = $this->getRequest()->getParam('postcode');
28 | $postcode = preg_replace ('#[^0-9]#', "", $postcode);
29 | if (empty ($postcode) || strlen ($postcode) != 8) return;
30 |
31 | $result = $this->_autocompleteHelper->getCEPLocationAddressComplete ($postcode);
32 | if (!$result || !is_array ($result)) return;
33 |
34 | if (array_key_exists ('content', $result))
35 | {
36 | $this->getResponse()->setBody(json_encode ($result ['content']));
37 | }
38 | }
39 |
40 | }
41 |
42 |
--------------------------------------------------------------------------------
/Controller/Search/Index.php:
--------------------------------------------------------------------------------
1 |
6 | */
7 |
8 | namespace Intelipost\Autocomplete\Controller\Search;
9 |
10 | class Index extends \Intelipost\Autocomplete\Controller\Adminhtml\Search\Index
11 | {
12 |
13 | protected $_autocompleteHelper;
14 |
15 | public function __construct(
16 | \Magento\Framework\App\Action\Context $context,
17 | \Intelipost\Autocomplete\Helper\Api $autocompleteHelper
18 | )
19 | {
20 | $this->_autocompleteHelper = $autocompleteHelper;
21 |
22 | parent::__construct ($context, $autocompleteHelper);
23 | }
24 |
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/Helper/Api.php:
--------------------------------------------------------------------------------
1 |
6 | */
7 |
8 | namespace Intelipost\Autocomplete\Helper;
9 |
10 | class Api extends \Intelipost\Basic\Helper\Api
11 | {
12 |
13 | const AUTOCOMPLETE_CEP_LOCATION_ADDRESS_COMPLETE = 'cep_location/address_complete/';
14 |
15 | protected $_scopeConfig;
16 |
17 | public function __construct
18 | (
19 | \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
20 | )
21 | {
22 | $this->_scopeConfig = $scopeConfig;
23 |
24 | parent::__construct($scopeConfig);
25 | }
26 |
27 | public function getCEPLocationAddressComplete ($destPostcode)
28 | {
29 | $response = $this->apiRequest (self::GET, self::AUTOCOMPLETE_CEP_LOCATION_ADDRESS_COMPLETE . "{$destPostcode}");
30 |
31 | $result = json_decode ($response, true);
32 |
33 | return $result;
34 | }
35 |
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Manual de Uso: Módulo Autocomplete Intelipost
2 |
3 | [](http://www.intelipost.com.br)
4 |
5 | ## Introdução
6 |
7 | O módulo Autocomplete Intelipost é responsável por completar os dados de endereço partindo do CEP fornecido pelo cliente final.
8 | A consulta do CEP é feita na [API Intelipost](https://docs.intelipost.com.br/v1/cep/autocomplete).
9 |
10 | Com a instalação do módulo, essa funcionalidade estará disponível em 3 páginas:
11 |
12 | - Checkout (.../checkout/index/index),
13 | - Página de criação de cadastro de cliente (.../customer/account/create),
14 | - Página de atualização/criação de novo endereço (.../customer/address/form).
15 |
16 | Este manual foi divido em três partes:
17 |
18 | - [Instalação](#instalação): Onde você econtrará instruções para instalar nosso módulo.
19 | - [Configurações](#configurações): Onde você encontrará o caminho para realizar as configurações e explicações de cada uma delas.
20 | - [Uso](#uso): Onde você encontrará a maneira de utilização de cada uma das funcionalidades.
21 |
22 | ## Instalação
23 | > É recomendado que você tenha um ambiente de testes para validar alterações e atualizações antes de atualizar sua loja em produção.
24 |
25 | > A instalação do módulo é feita utilizando o Composer. Para baixar e instalar o Composer no seu ambiente acesse https://getcomposer.org/download/ e caso tenha dúvidas de como utilizá-lo consulte a [documentação oficial do Composer](https://getcomposer.org/doc/).
26 |
27 | Navegue até o diretório raíz da sua instalação do Magento 2 e execute os seguintes comandos:
28 |
29 |
30 | ```
31 | bin/composer require intelipost/magento2-autocomplete // Faz a requisição do módulo da Intelipost
32 | bin/magento module:enable Intelipost_Autocomplete // Ativa o módulo
33 | bin/magento setup:upgrade // Registra a extensão
34 | bin/magento setup:di:compile // Recompila o projeto Magento
35 | ```
36 |
37 | ## Configurações
38 | Para acessar o menu de configurações, basta seguir os seguintes passos:
39 |
40 | No menu à esquerda, acessar **Stores** -> **Configuration** -> **Intelipost** -> **Auto Complete**:
41 |
42 | 
43 |
44 |
45 | ### Configurações Básicas
46 | Nesta primeira etapa, a única configuração a ser feita é **Tempo de Carregamento da Página** (Load Page Time) em milisegundos.
47 | Ela indica a quantidade de tempo que deve ser esperado antes de carregar o script de autocomplete na página.
48 | O padrão é de 3000 ms.
49 |
50 | ### Checkout - Customização por "name" dos campos
51 | Nesta seção você deverá configurar os "names" dos campos do front-end que deverão receber cada uma das seguintes informações:
52 |
53 | - State: Estado
54 | - City: Cidade
55 | - Street: Rua
56 | - Quarter: Bairro
57 | - Additional Information: Informações Adicionais
58 |
59 | Caso o cliente não faça uso de alguns desses campos para serem completados, basta deixá-los em branco.
60 | Caracteres especiais podem ser escapados utilizando duas barras invertidas "\\\\".
61 | Por exemplo: Se o campo Bairro for o quarto item do array **street[]**, deve ser configurado da seguinte maneira: street\\\\[3\\\\].
62 |
63 | ### Editar Endereço do Consumidor - Customização por "id"
64 | As configurações de Criar e Editar Endereço são bem semelhantes ao Checkout. A grande diferença é o parâmetro usado para identificar o campo no front-end. Enquanto no Checkout é o **"name"**, nas páginas de editar o endereço é o **"id"** do campo.
65 |
66 | - State: Estado
67 | - City: Cidade
68 | - Street: Rua
69 | - Quarter: Bairro
70 | - Additional Information: Informações Adicionais
71 |
72 | Caso o cliente não faça uso de alguns desses campos para serem completados, basta deixá-los em branco.
73 |
74 | ### Criar Endereço do Consumidor - Customização por "id"
75 | Assim como nas configurações para editar o endereço, as configurações de criar endereõ também são customizadas a partir do **"id"** do campo no front-end.
76 |
77 | - State: Estado
78 | - City: Cidade
79 | - Street: Rua
80 | - Quarter: Bairro
81 | - Additional Information: Informações Adicionais
82 |
83 | Caso o cliente não faça uso de alguns desses campos para serem completados, basta deixá-los em branco.
84 |
85 | ## Uso
86 |
87 | O uso do módulo é bem simples. Uma vez instalado e configurado, basta ir até a página de checkout (ou de criação/edição de cadastro) e preencher um CEP. Assim que o foco for tirado do campo CEP, os campos serão preenchidos automaticamente no formulário (rua, bairro, cidade, estado e informações adicionais).
88 |
89 | 
90 |
--------------------------------------------------------------------------------
/catalog-info.yaml:
--------------------------------------------------------------------------------
1 |
2 | apiVersion: backstage.io/v1alpha1
3 | kind: Component
4 | metadata:
5 | name: magento2-autocomplete
6 | description: some description
7 | annotations:
8 | argocd/app-name: magento2-autocomplete
9 | github.com/project-slug: intelipost/magento2-autocomplete
10 | sonarqube.org/project-key: magento2-autocomplete
11 | spec:
12 | type: service
13 | lifecycle: production
14 | owner: expedicao
15 | childof:
16 | - group:tms-engineering-managers
17 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "intelipost/magento2-autocomplete",
3 | "description": "Intelipost Autocomplete",
4 | "type": "magento2-module",
5 | "version": "1.1.0",
6 | "authors": [
7 | {
8 | "name": "Intelipost",
9 | "email": "integracoes@intelipost.com.br",
10 | "homepage": "http://www.intelipost.com.br/"
11 | },
12 | {
13 | "name": "Eneias Ramos de Melo",
14 | "email": "eneias@gamuza.com.br",
15 | "homepage": "http://www.gamuza.com.br/"
16 | }
17 | ],
18 | "license": [
19 | "OSL-3.0"
20 | ],
21 | "require": {
22 | "php": "~5.5.0|~5.6.0|~7.0.0|~7.1.0",
23 | "intelipost/magento2-basic": "1.*"
24 | },
25 | "autoload": {
26 | "files": [
27 | "registration.php"
28 | ],
29 | "psr-4": {
30 | "Intelipost\\Autocomplete\\": ""
31 | }
32 | }
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/etc/adminhtml/routes.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |