Database::var2str() debe lanzar una excepción clara cuando se le pasa como parámetro un array o un objeto, ya que si por error asignamos un objeto a una columna de un modelo, el error que se produce no es nada intuitivo y tardaremos mucho tiempo en localizar el verdadero error. El mensaje de error debería mostrar claramente la función y el tipo de objeto recibido.
$cliente->idcontacto = $this->getContacto(); // se nos ha olvidado el ->idcontacto
// y por tanto estamos asignando un objeto Contacto en lugar de su id
$cliente->save(); // al hacer save(), internamente se llamará a var2str() mientras se genera la SQL
// y ahi recibiremos un error muy poco claro.
Para entregar esta tarea haz un pull request con los cambios en
https://github.com/NeoRazorX/facturascripts
Puntos de soporte: +10