FacturaScripts  
Hola,

Retomando el comentario que hice hace 3 meses: https://www.facturascripts.com/comm3/index.php?page=community_item&id=3242

Al hacer click en INFORMES -> CLIENTES -> DEUDORES, se muestran correctamente el listado de clientes deudores, pero el monto adeudado esta incorrecto.

He descubierto que el problema esta en el SQL ejecutado al momento de listar los deudores, actualmente se esta ejecutando la sentencia:
select codcliente,sum(importeeuros) as total from reciboscli where estado != 'Pagado' group by codcliente order by total DESC LIMIT 100 OFFSET 0;


Se puede apreciar que la columna que esta sumando es "importeeuros", entonces trae el valor en euros y lo convierte a la moneda local configurada en FS utilizando la columna "CODDIVISA" que en mi caso es DOP(Pesos Dominicanos), esto es un problema obvio ya que si emites una factura a un cliente en DOP$100.00 (Pesos dominicanos) y en ese momento se guardo también el valor de importeeuros utilizando la tasa configurada en ese momento hasta ahí va bien. El problema es que la tasa cambia en el tiempo, y cuando ejecutas la consulta de DEUDORES un mes mas tarde el valor del recibo sera diferente.

En mi caso particular y de todo el que factura en una sola moneda, se podria solucionarlo solo cambiando la columna a sumar en la sentencia SQL, quedaría de esta forma:
select codcliente,sum(importe) as total from reciboscli where estado != 'Pagado' group by codcliente order by total DESC LIMIT 100 OFFSET 0;


Pero esto no solucionaría el problema del que factura en varias monedas, por lo que rapidamente se me ocurre que una solución seria:
1- Agregar la columna "tasaconv" en la tabla "reciboscli", y calcular el "sum(importeeuros)" en base a este valor, de esta manera el calculo siempre dará el valor correcto original.

Que piensan ustedes ?

Saludos.
Consejo: Envía los errores desde FacturaScripts. Nos aportan información extra y tienen prioridad sobre el resto. Puedes enviarlos desde tu pantalla de FacturaScripts, en el menú superior derecho, botón (?) -> Informar...

hace 1 mes   360st   [partner]
Como aclaración adicional, he cambiado las siguientes dos lineas en el controlador "informes_clientes" de Facturación Premium:
image
hace 1 mes   NeoRazorX   [admin]
Para solucionar esto, lo más sencillo es consultar la tasa de conversión en la tabla divisas al momento de calcular.
hace 1 mes   360st   [partner]
Carlos, acabo de verificar y FS actualmente guarda el CODDIVISA y TASACONV en las tablas 'reciboscli' y "facturascli" y tambien veo que al método 'euro_convert' se le puede pasar ambos valores :
public function euro_convert($precio, $coddivisa = NULL, $tasaconv = NULL)


Por lo que creo que debería quedar de la siguiente forma:
   private function clientes_deudores()
   {
      $tclist = array();
      
      if( class_exists('recibo_cliente') )
      {
         $sql = "select codcliente, coddivisa, tasaconv, sum(importeeuros) as total from reciboscli"
                 . " where estado != 'Pagado' group by codcliente order by total DESC";
         //$sql = "select codcliente,sum(importeeuros) as total from reciboscli"
         //        . " where estado != 'Pagado' group by codcliente order by total DESC";
      }
      else
      {
         $sql = "select codcliente,coddivisa, tasaconv,sum(totaleuros) as total from facturascli"
                 . " where pagada = false group by codcliente order by total DESC";        
        // $sql = "select codcliente,sum(totaleuros) as total from facturascli"
        //         . " where pagada = false group by codcliente order by total DESC";
      }
      
      $data = $this->db->select_limit($sql, 100, 0);
      if($data)
      {
         foreach($data as $d)
         {
            $cliente = $this->cliente->get($d['codcliente']);
            if($cliente)
            {
               if(!$cliente->debaja)
               {
                  $deudas = $this->euro_convert( floatval($d['total']),$d['coddivisa'],$d['tasaconv'] );
                  //$deudas = $this->euro_convert( floatval($d['total']) );
                  $tclist[] = array($cliente, $deudas);
               }
            }
         }
      }
      
      return $tclist;
   }


Que piensas Carlos, esta correcta esta implementación ?
hace 1 mes   360st   [partner]
Carlos, he modificado nuevamente el controlador y la vista, esta vez para que muestre el total de los deudores correctamente cuando se utiliza multiples divisas. ( Cierra el otro hilo, para continuar en este https://www.facturascripts.com/comm3/index.php?page=community_item&id=3770

Agregar variable al controlador:
class informe_clientes extends fs_controller
{
   public $cliente;
   public $opcion;
   public $resultados;
   public $clientes_deuda_total;
   
   public function __construct()



   private function clientes_deudores()
   {
      $tclist = array();
      $this->clientes_deuda_total=0;
      
      if( class_exists('recibo_cliente') )
      {
         $sql = "select codcliente, coddivisa, tasaconv, sum(importeeuros) as total from reciboscli"
                 . " where estado != 'Pagado' group by codcliente order by total DESC";
         //$sql = "select codcliente,sum(importeeuros) as total from reciboscli"
         //        . " where estado != 'Pagado' group by codcliente order by total DESC";
      }
      else
      {
         $sql = "select codcliente,coddivisa, tasaconv,sum(totaleuros) as total from facturascli"
                 . " where pagada = false group by codcliente order by total DESC";   
        // $sql = "select codcliente,sum(totaleuros) as total from facturascli"
        //         . " where pagada = false group by codcliente order by total DESC";
      }
      
      $data = $this->db->select($sql);
      if($data)
      {
         foreach($data as $d)
         {
            $cliente = $this->cliente->get($d['codcliente']);
            if($cliente)
            {
               if(!$cliente->debaja)
               {
                  $deudas = $this->euro_convert( floatval($d['total']),$d['coddivisa'],$d['tasaconv'] );
                  $this->clientes_deuda_total += $deudas;
                  //$deudas = $this->euro_convert( floatval($d['total']) );
                  $tclist[] = array($cliente, $deudas);
               }
            }
         }
      }
      
      return $tclist;
   }



En la vista solo hay que modificar despues de la linea 111:
      <tr class="warning">
         <td colspan="6">Sin resultados.</td>
      </tr>
      {/loop}
      <tr class="warning">
          <td colspan="6" class="text-right">Total: {$fsc->show_precio($fsc->clientes_deuda_total)}</td>
      </tr> 

Tu email:

Plugin prestashop_micro  OFERTA

Este plugin es un conector que permite importar artículos, clientes y pedidos desde una tienda online PrestaShop. - La importación inicial te permite traer todos los artículos de tu tienda con sus precios, atributos y combinaciones. - Podrás ver los pedidos de tu tienda desde ventas -> pedi...

Plugin woocommerce  OFERTA

Este plugin es un conector con el que puedes importar a golpe de clic los artículos, clientes y pedidos de tu tienda online Woocommerce: – Este plugin conecta usando la API de WooCommerce, es decir, no es necesario tener FacturaScripts en el mismo servidor que WooCommerce. – Copia automática...



Loading.es

¿Necesita hosting? Loading.es le ofrece hosting para FacturaScripts y/o su tienda online desde 3,90 € / mes, con servidores en España y copias de seguridad diarias.







© 2013-2017 FacturaScripts