Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte geral sobre problemas técnicos para OpenCart v3.x.
Avatar do usuário
Por turcorossi
Mensagens
#91003
Olá gente!

Estou tentando montar um modulo que informe uma porcentagem exemplo de 10% em todos os produtos do site.

Tenho os seguinte códigos:

Controller:
Código: Selecionar todos
<?php
class ControllerExtensionModulePercentageFee extends Controller {
    private $error = array();

   public function index() {
    $this->load->language('extension/module/percentage_fee');

    $this->document->setTitle($this->language->get('heading_title'));

    $this->load->model('setting/setting');

    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
        $this->model_setting_setting->editSetting('module_percentage_fee', $this->request->post);

        $this->session->data['success'] = $this->language->get('text_success');

        $this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module', true));
    }

    if (isset($this->error['warning'])) {
        $data['error_warning'] = $this->error['warning'];
    } else {
        $data['error_warning'] = '';
    }

    $data['breadcrumbs'] = array();

    $data['breadcrumbs'][] = array(
        'text' => $this->language->get('text_home'),
        'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
    );

    $data['breadcrumbs'][] = array(
        'text' => $this->language->get('text_extension'),
        'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module', true)
    );

    $data['breadcrumbs'][] = array(
        'text' => $this->language->get('heading_title'),
        'href' => $this->url->link('extension/module/percentage_fee', 'user_token=' . $this->session->data['user_token'], true)
    );

    $data['action'] = $this->url->link('extension/module/percentage_fee', 'user_token=' . $this->session->data['user_token'], true);

    $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module', true);

    if (isset($this->request->post['module_percentage_fee'])) {
        $data['module_percentage_fee'] = $this->request->post['module_percentage_fee'];
    } else {
        $data['module_percentage_fee'] = $this->config->get('module_percentage_fee');
    }

    $data['header'] = $this->load->controller('common/header');
	$data['column_left'] = $this->load->controller('common/column_left');
	$data['footer'] = $this->load->controller('common/footer');

	$this->response->setOutput($this->load->view('extension/module/percentage_fee', $data));
   }

		protected function validate() {
        if (!$this->user->hasPermission('modify', 'extension/module/percentage_fee')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        if (!$this->request->post['module_percentage_fee']) {
            $this->error['fee'] = $this->language->get('error_fee');
        }

        return !$this->error;
    }
}
E tenho o view:
Código: Selecionar todos
{{ header }}{{ column_left }}
<div id="content">
    <div class="page-header"> 
        <div class="container-fluid">
            <div class="pull-right">
                <button type="submit" form="form-augment-prices" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
                <a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a>
            </div>
            <h1>{{ heading_title }}</h1>
			            <ul class="breadcrumb">
                {% for breadcrumb in breadcrumbs %}
                <li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
                {% endfor %}
            </ul>
        </div>
    </div>
    <div class="container-fluid">
        {% if error_warning %}
        <div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
            <button type="button" class="close" data-dismiss="alert">&times;</button>
        </div>
        {% endif %}
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_edit }}</h3>
            </div>
            <div class="panel-body">
 <form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-percentage-fee">
      <div class="form-group">
        <label class="col-form-label" for="input-status">{{ entry_status }}</label>
        <select name="percentage_fee_status" id="input-status" class="form-control">
          {% if percentage_fee_status %}
          <option value="1" selected="selected">{{ text_enabled }}</option>
          <option value="0">{{ text_disabled }}</option>
          {% else %}
          <option value="1">{{ text_enabled }}</option>
          <option value="0" selected="selected">{{ text_disabled }}</option>
          {% endif %}
        </select>
      </div>
      <div class="form-group">
        <label class="col-form-label" for="input-percentage">{{ entry_percentage }}</label>
        <input type="text" name="percentage_fee_percentage" value="{{ percentage_fee }}" placeholder="{{ entry_percentage }}" id="input-percentage" class="form-control"/>
      </div>
      <div class="text-right">
        <button type="submit" form="form-percentage-fee" class="btn btn-primary">{{ button_save }}</button>
        <a href="{{ cancel }}" class="btn btn-secondary">{{ button_cancel }}</a>
      </div>
    </form>
            </div>
        </div>
    </div>
</div>
{{ footer }}
E o model
Código: Selecionar todos
<?php
class ModelExtensionModulePercentageFee extends Model {
    public function getPercentage() {
        $query = $this->db->query("SELECT value FROM " . DB_PREFIX . "setting WHERE `key` = 'module_percentage_fee_fee'");
        
        return $query->row['value'];
    }
}
Dentro do banco de dados na tabela oc_setting
Adicionei a tabela que aceite o valor
VALUES (0, 'module', 'module_percentage_fee', '1', 0);
Para ficar gravado em banco o valor da porcentagem

E no frontend somente adicionar o valor de {{ sale_price }}.

Pq eu estou fazendo isso.
Atualmente existe uma OC com + - 6000 produtos.

Utilizamos um ERP integrado a um HUB
ERP envia o cadastro de produto ao HUB e o HUB envia para o O.C.

O que acontece que no O.C vendemos a grupos de usuários.

Alguns usuários ganham desconto pela forma de pagamento.

E acaba que pega o valor do ERP (valor original) e da o desconto

Mas não pode-se vender ao preço abaixo do ERP.
Então pensei em criar o modulo que seja colocar uma porcentagem tipo 5% e ele substitua o valor de venda.
Recebe o valor Base e acrescenta 5% no valor do produto de venda.

Alguns vão dizer que é para mudar no cadastro do produto. mas não temos como fazer manualmente, pelo fato de muitos produtos em cadastros.
E pelo fluxo de entrada e saída de produtos.

Pois todo o processo é feito pelo ERP e não pelo OC.

Mas encerrando o Poadcast
No controller:
Código: Selecionar todos
<?php
class ControllerExtensionModulePercentageFee extends Controller {
    private $error = array();

   public function index() {
    $this->load->language('extension/module/percentage_fee');

    $this->document->setTitle($this->language->get('heading_title'));

    $this->load->model('setting/setting');

    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
        $this->model_setting_setting->editSetting('module_percentage_fee', $this->request->post);

        $this->session->data['success'] = $this->language->get('text_success');

        $this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module', true));
    }

    if (isset($this->error['warning'])) {
        $data['error_warning'] = $this->error['warning'];
    } else {
        $data['error_warning'] = '';
    }

    $data['breadcrumbs'] = array();

    $data['breadcrumbs'][] = array(
        'text' => $this->language->get('text_home'),
        'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
    );

    $data['breadcrumbs'][] = array(
        'text' => $this->language->get('text_extension'),
        'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module', true)
    );

    $data['breadcrumbs'][] = array(
        'text' => $this->language->get('heading_title'),
        'href' => $this->url->link('extension/module/percentage_fee', 'user_token=' . $this->session->data['user_token'], true)
    );

    $data['action'] = $this->url->link('extension/module/percentage_fee', 'user_token=' . $this->session->data['user_token'], true);

    $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module', true);

    if (isset($this->request->post['module_percentage_fee'])) {
        $data['module_percentage_fee'] = $this->request->post['module_percentage_fee'];
    } else {
        $data['module_percentage_fee'] = $this->config->get('module_percentage_fee');
    }

    $data['header'] = $this->load->controller('common/header');
	$data['column_left'] = $this->load->controller('common/column_left');
	$data['footer'] = $this->load->controller('common/footer');

	$this->response->setOutput($this->load->view('extension/module/percentage_fee', $data));
   }

		protected function validate() {
        if (!$this->user->hasPermission('modify', 'extension/module/percentage_fee')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        if (!$this->request->post['module_percentage_fee']) {
            $this->error['fee'] = $this->language->get('error_fee');
        }

        return !$this->error;
    }
}
Esta apresentando erro na hora de salvar no view

Ao clicar no salvar apresenta o erro
Notice: Undefined index: module_percentage_fee in admin/controller/extension/module/percentage_fee.php on line 65
Código: Selecionar todos
if (!$this->request->post['module_percentage_fee']) {
            $this->error['fee'] = $this->language->get('error_fee');
        }
Seria adicionar uma verificação se o índice "module_percentage_fee" está definido na variável $_POST antes de tentar acessá-lo?
Mas não estou conseguindo acertar.

Não grava no banco a informação também.

Alguém que consiga me auxilar?
Por veteranodf
Mensagens Especiais
#91004
Olá;

Olhando por cima vi um erro no "twig", os nomes dos inputs estão começando com name="percentage_fee e devem começar com name="module_percentage_fee

Outra questão é que o método class ModelExtensionModulePercentageFee extends Model não deve existir, a extensão utiliza o método nativo do opencart para salvar e atualizar os inputs da extensão no banco de dados, veja $this->model_setting_setting->editSetting

Desenvolver extensões você pegará o jeito com o tempo; Tem que ser minucioso em tudo;
Avatar do usuário
Por turcorossi
Mensagens
#91005
@veteranodf Grato pelas orientações.
Todo o inicio é complicado. Mas a gente aprende.

Vou verificar novamente e ver se tenho sucesso.
Se não solicito auxilio novamente.

Obrigado

Ola @felipesujf Se você extrai os arquiv[…]

extensção -> Módulos

Voltou ao normal sozinho

Olá Uso o OpenCart 2 e tenho algumas d&uac[…]

Night games. One night, no worries Real Women P[…]