Jump to content

Duplicar Customer.Note


Eutanasio

Recommended Posts

Hola,

 

Quisiera duplicar para tener lo mismo que es la nota privada de cada cliente, para anotar saldo en cuenta cliente y que éste se muestre a su vez al cliente en my-account.tpl.

He creado la nueva tabla en ps_customer. Luego he ido a root>admin>themes>default>template>controllers>orders>helpers>view>view.tpl y he duplicado el fragmento de código correspondiente a Nota Privada cambiando donde pone "Note" por el nombre de la nueva tabla creado en la BD, en este caso "Saldo":
 

<!-- SALDO CLIENTE -->
			<div class="panel panel-sm">
					<div class="panel-heading">
									<i class="icon-eye-slash"></i>
						{l s='Solde compte client'}
					</div>
					<form id="customer_saldo" class="form-horizontal" action="ajax.php" method="post" onsubmit="saveCustomerSaldo({$customer->id});return false;" >
						<div class="form-group">
							<div class="col-lg-12">
								<textarea name="saldo" id="saldoContent" style="color: #ff0000; font-weight: bold;" class="textarea-autosize" onkeyup="$(this).val().length > 0 ? $('#submitCustomerSaldo').removeAttr('disabled') : $('#submitCustomerSaldo').attr('disabled', 'disabled')">{$customer->saldo}</textarea>
							</div>
						</div>
						<div class="row">
							<div class="col-lg-12">
								<button type="submit" id="submitCustomerSaldo" class="btn btn-default pull-right" disabled="disabled" />
									<i class="icon-save"></i>
									{l s='Save'}
								</button>
							</div>
						</div>
						<span id="saldo_feedback"></span>
					</form>
				</div>
	<!-- FIN SALDO CLIENTE -->

Pero habiendo duplicado esto, creando la nueva tabla en la BD e imitado lo que hay de "Note" en (controllers/admin/AdminCustomerControllers.php), no ha funcionado, ya que aunque se muestra en el admin el formulario, no se guarda carga una página en blanco http://www.miweb.com/admin/ajax.php

Alguien sabría aconsejarme para solucionar este problema? hacer que funcione este nuevo campo y cómo hacer llamada a este dato para publicarlo en el front en my-account.tpl.

 

Gracias!

Edited by omar2886 (see edit history)
Link to comment
Share on other sites

Tienes que añadirlo en el Classes/Customer.php

 

Al inicio

/** @var string protected note */
	public $saldo;

Y luego en el array

'saldo' => array('type' => self::TYPE_HTML, 'validate' => 'isCleanHtml', 'size' => 65000, 'copy_post' => false),
Link to comment
Share on other sites

Claro es que tienes que añadir tambien en el AdminCustomerController.php o en algun controlador, algo asi

$this->tpl_view_vars = array( // <-- En esta parte
'saldo' => Tools::htmlentitiesUTF8($customer->saldo),

Y luego esto para actualizar en ajax

public function ajaxProcessUpdateCustomerSaldo()
	{
		if ($this->tabAccess['edit'] === '1')
		{
			$saldo = Tools::htmlentitiesDecodeUTF8(Tools::getValue('saldo'));
			$customer = new Customer((int)Tools::getValue('id_customer'));
			if (!Validate::isLoadedObject($customer))
				die ('error:update');
			if (!empty($saldo) && !Validate::isCleanHtml($saldo))
				die ('error:validation');
			$customer->saldo= $saldo;
			if (!$customer->update())
				die ('error:update');
			die('ok');
		}
	}
Link to comment
Share on other sites

Sí efectivamente así es como lo tengo modificado allí también.
Cuando inserto por ejemplo algún dato a través de PhpMyadmin en el campo "saldo" de un cliente, se puede ver perfectamente en el admin, por que está bien todo, simplemente que no se guarda editando desde el Back Office.
Y otra cosa, cómo hago que aparezca en el front? he probado con {$cookie->saldo} pero no va.

Gracias!

Edited by omar2886 (see edit history)
Link to comment
Share on other sites

Luego en

\js\admin.js

Tienes que añadir esto, revisalo que ahi esta el problema

function saveCustomerSaldo(customerId){
	var saldoContent = $('#saldoContent').val();
	var data = 'token=' + token_admin_customers + '&tab=AdminCustomers&ajax=1&action=updateCustomerSaldo&id_customer=' + customerId + '&saldo=' + encodeURIComponent(saldoContent);
	$.ajax({
		type: "POST",
		url: "index.php",
		data: data,
		async : true,
		success: function(r) {

			if (r == 'ok') {
				$('#submitCustomerSaldo').attr('disabled', true);
			}
			showSuccessMessage(update_success_msg);
		}
	});
}
Edited by ventura (see edit history)
  • Like 1
Link to comment
Share on other sites

Es un milagro! muchísimas gracias @Ventura! creo que es una funcionalidad relativamente facil de implementar ahora que lo has aclarado y que es de gran utilidad.
cómo puedo hacer para imprimir el contenido de este campo "saldo" en my-account.tpl para que el cliente lo vea desde su cuenta en el front? intenté usar esto que hice para mostrar el ID de cliente {$cookie->saldo} y {$smarty.post.saldo} pero no vale para el campo "saldo" al parecer ya que no debe estar en la cookie.

Muchas gracias!

Edited by omar2886 (see edit history)
Link to comment
Share on other sites

Añade en el

controllers\front\MyAccountController.php

en la parte de 

$this->context->smarty->assign(array(

esto

 'saldo' => $this->context->customer->saldo

asegurate de poner la coma al final de la linea anterior

 

Y  en el .tpl

{$saldo}
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...