PageRenderTime 26ms CodeModel.GetById 28ms RepoModel.GetById 2ms app.codeStats 0ms

/plugins/tesoreria/controller/compras_recibo.php

https://gitlab.com/cosouth.battle/sartinofi
PHP | 370 lines | 316 code | 41 blank | 13 comment | 38 complexity | 3a3eb0b7636c8e25ba5bb3630722e0f1 MD5 | raw file
  1. <?php
  2. /**
  3. * @author Carlos García Gómez neorazorx@gmail.com
  4. * @copyright 2015, Carlos García Gómez. All Rights Reserved.
  5. */
  6. require_model('asiento.php');
  7. require_model('cuenta_banco.php');
  8. require_model('cuenta_banco_proveedor.php');
  9. require_model('ejercicio.php');
  10. require_model('factura_proveedor.php');
  11. require_model('forma_pago.php');
  12. require_model('pago_recibo_proveedor.php');
  13. require_model('partida.php');
  14. require_model('proveedor.php');
  15. require_model('recibo_factura.php');
  16. require_model('recibo_proveedor.php');
  17. require_model('subcuenta.php');
  18. /**
  19. * Description of compras_recibo
  20. *
  21. * @author carlos
  22. */
  23. class compras_recibo extends fs_controller
  24. {
  25. public $allow_delete;
  26. public $ejercicio;
  27. public $factura;
  28. public $pagos;
  29. public $proveedor;
  30. public $recibo;
  31. public $recibos;
  32. public $subcuenta_pro;
  33. public $subcuentas_pago;
  34. public function __construct()
  35. {
  36. parent::__construct(__CLASS__, 'Recibo', 'compras', FALSE, FALSE);
  37. }
  38. protected function private_core()
  39. {
  40. /// ¿El usuario tiene permiso para eliminar en esta página?
  41. $this->allow_delete = $this->user->allow_delete_on(__CLASS__);
  42. $recibo = new recibo_proveedor();
  43. $this->recibo = FALSE;
  44. if( isset($_REQUEST['id']) )
  45. {
  46. $this->recibo = $recibo->get($_REQUEST['id']);
  47. }
  48. if($this->recibo)
  49. {
  50. if( isset($_POST['fechav']) )
  51. {
  52. $this->recibo->importe = floatval($_POST['importe']);
  53. $this->recibo->fecha = $_POST['emitido'];
  54. $this->recibo->fechav = $_POST['fechav'];
  55. $this->recibo->iban = $_POST['iban'];
  56. $this->recibo->swift = $_POST['swift'];
  57. if( $this->recibo->save() )
  58. {
  59. $this->new_message('Datos guardados correctamente.');
  60. }
  61. else
  62. $this->new_error_msg('Error al guardar los datos.');
  63. }
  64. $this->page->title = 'Recibo '.$this->recibo->codigo;
  65. $fact = new factura_proveedor();
  66. $this->factura = $fact->get($this->recibo->idfactura);
  67. $this->check_recibo();
  68. $this->get_subcuentas();
  69. $pago = new pago_recibo_proveedor();
  70. if( isset($_POST['nuevopago']) )
  71. {
  72. $pago->idrecibo = $this->recibo->idrecibo;
  73. $pago->fecha = $_POST['fecha'];
  74. $pago->tipo = $_POST['tipo'];
  75. foreach($this->subcuentas_pago as $sc)
  76. {
  77. if($sc->codsubcuenta == $_POST['codsubcuenta'])
  78. {
  79. $pago->idsubcuenta = $sc->idsubcuenta;
  80. $pago->codsubcuenta = $sc->codsubcuenta;
  81. }
  82. }
  83. if($pago->tipo == 'Pago')
  84. {
  85. if( $this->empresa->contintegrada AND isset($_POST['generarasiento']) )
  86. {
  87. $pago->idasiento = $this->nuevo_asiento_pago($pago, $this->ejercicio);
  88. }
  89. $this->recibo->estado = 'Pagado';
  90. $this->recibo->fechap = $_POST['fecha'];
  91. }
  92. else
  93. {
  94. if( $this->empresa->contintegrada AND isset($_POST['generarasiento']) )
  95. {
  96. $pago->idasiento = $this->nuevo_asiento_devolucion($pago, $this->ejercicio);
  97. }
  98. $this->recibo->estado = 'Devuelto';
  99. }
  100. if( $pago->save() )
  101. {
  102. $this->new_message('Pago guardado correctamente.');
  103. $this->recibo->save();
  104. }
  105. else
  106. $this->new_error_msg('Error al guardar los pagos.');
  107. }
  108. else if( isset($_GET['deletep']) )
  109. {
  110. foreach($pago->all_from_recibo($this->recibo->idrecibo) as $pg)
  111. {
  112. if( $pg->idpagodevol == intval($_GET['deletep']) )
  113. {
  114. if( $pg->delete() )
  115. {
  116. $this->new_message($pg->tipo.' eliminado correctamente');
  117. $this->recibo->estado = 'Emitido';
  118. $this->recibo->save();
  119. }
  120. else
  121. $this->new_error_msg('Error al eliminar el '.$pg->tipo);
  122. break;
  123. }
  124. }
  125. }
  126. $this->pagos = $pago->all_from_recibo($this->recibo->idrecibo);
  127. $this->recibos = $this->recibo->all_from_factura($this->recibo->idfactura);
  128. $this->sync_factura();
  129. }
  130. else
  131. $this->new_error_msg('Recibo no encontrado.');
  132. }
  133. public function url()
  134. {
  135. if( isset($this->recibo) )
  136. {
  137. return $this->recibo->url();
  138. }
  139. else
  140. return parent::url();
  141. }
  142. private function nuevo_asiento_devolucion(&$pago, $ejercicio)
  143. {
  144. $asiento = new asiento();
  145. $asiento->fecha = $pago->fecha;
  146. $asiento->codejercicio = $ejercicio->codejercicio;
  147. $asiento->concepto = $pago->tipo.' recibo compra '.$this->recibo->codigo.' - '.$this->recibo->nombreproveedor;
  148. $asiento->editable = FALSE;
  149. $asiento->importe = $this->recibo->importe;
  150. if($this->factura)
  151. {
  152. $asiento->tipodocumento = "Factura de proveedor";
  153. $asiento->documento = $this->factura->codigo;
  154. }
  155. if( !$ejercicio->abierto() )
  156. {
  157. $this->new_error_msg('El ejercicio '.$ejercicio->codejercicio.' está cerrado.');
  158. }
  159. else if( $asiento->save() )
  160. {
  161. $partida1 = new partida();
  162. $partida1->idasiento = $asiento->idasiento;
  163. $partida1->concepto = $asiento->concepto;
  164. $partida1->idsubcuenta = $this->subcuenta_pro->idsubcuenta;
  165. $partida1->codsubcuenta = $this->subcuenta_pro->codsubcuenta;
  166. $partida1->haber = $this->recibo->importe;
  167. $partida1->coddivisa = $this->recibo->coddivisa;
  168. $partida1->tasaconv = $this->recibo->tasaconv;
  169. $partida1->codserie = $this->recibo->codserie;
  170. $partida1->save();
  171. $partida2 = new partida();
  172. $partida2->idasiento = $asiento->idasiento;
  173. $partida2->concepto = $asiento->concepto;
  174. $partida2->idsubcuenta = $pago->idsubcuenta;
  175. $partida2->codsubcuenta = $pago->codsubcuenta;
  176. $partida2->debe = $this->recibo->importe;
  177. $partida2->coddivisa = $this->recibo->coddivisa;
  178. $partida2->tasaconv = $this->recibo->tasaconv;
  179. $partida2->codserie = $this->recibo->codserie;
  180. $partida2->save();
  181. }
  182. else
  183. {
  184. $this->new_error_msg('Error al guardar el asiento.');
  185. }
  186. return $asiento->idasiento;
  187. }
  188. private function nuevo_asiento_pago(&$pago, $ejercicio)
  189. {
  190. $asiento = new asiento();
  191. $asiento->fecha = $pago->fecha;
  192. $asiento->codejercicio = $ejercicio->codejercicio;
  193. $asiento->concepto = $pago->tipo.' recibo compra '.$this->recibo->codigo.' - '.$this->recibo->nombreproveedor;
  194. $asiento->editable = FALSE;
  195. $asiento->importe = $this->recibo->importe;
  196. if($this->factura)
  197. {
  198. $asiento->tipodocumento = "Factura de proveedor";
  199. $asiento->documento = $this->factura->codigo;
  200. }
  201. if( !$ejercicio->abierto() )
  202. {
  203. $this->new_error_msg('El ejercicio '.$ejercicio->codejercicio.' está cerrado.');
  204. }
  205. else if( $asiento->save() )
  206. {
  207. $partida1 = new partida();
  208. $partida1->idasiento = $asiento->idasiento;
  209. $partida1->concepto = $asiento->concepto;
  210. $partida1->idsubcuenta = $this->subcuenta_pro->idsubcuenta;
  211. $partida1->codsubcuenta = $this->subcuenta_pro->codsubcuenta;
  212. $partida1->debe = $this->recibo->importe;
  213. $partida1->coddivisa = $this->recibo->coddivisa;
  214. $partida1->tasaconv = $this->recibo->tasaconv;
  215. $partida1->codserie = $this->recibo->codserie;
  216. $partida1->save();
  217. $partida2 = new partida();
  218. $partida2->idasiento = $asiento->idasiento;
  219. $partida2->concepto = $asiento->concepto;
  220. $partida2->idsubcuenta = $pago->idsubcuenta;
  221. $partida2->codsubcuenta = $pago->codsubcuenta;
  222. $partida2->haber = $this->recibo->importe;
  223. $partida2->coddivisa = $this->recibo->coddivisa;
  224. $partida2->tasaconv = $this->recibo->tasaconv;
  225. $partida2->codserie = $this->recibo->codserie;
  226. $partida2->save();
  227. }
  228. else
  229. {
  230. $this->new_error_msg('Error al guardar el asiento.');
  231. }
  232. return $asiento->idasiento;
  233. }
  234. private function get_subcuentas()
  235. {
  236. $this->ejercicio = FALSE;
  237. $this->subcuenta_pro = FALSE;
  238. $this->subcuentas_pago = array();
  239. $subcuenta = new subcuenta();
  240. $pro = new proveedor();
  241. $this->proveedor = $pro->get($this->recibo->codproveedor);
  242. if($this->proveedor)
  243. {
  244. $eje0 = new ejercicio();
  245. if( isset($_POST['fecha']) )
  246. {
  247. $this->ejercicio = $eje0->get_by_fecha($_POST['fecha']);
  248. }
  249. else
  250. $this->ejercicio = $eje0->get_by_fecha($this->today());
  251. if($this->ejercicio)
  252. {
  253. $this->subcuenta_pro = $this->proveedor->get_subcuenta($this->ejercicio->codejercicio);
  254. /// añadimos la subcuenta de la cuenta bancaria
  255. $cb0 = new cuenta_banco();
  256. $fp0 = new forma_pago();
  257. $formap = $fp0->get($this->recibo->codpago);
  258. if($formap)
  259. {
  260. if($formap->codcuenta)
  261. {
  262. $cuentab = $cb0->get($formap->codcuenta);
  263. if($cuentab)
  264. {
  265. $subc = $subcuenta->get_by_codigo($cuentab->codsubcuenta, $this->ejercicio->codejercicio);
  266. if($subc)
  267. {
  268. $this->subcuentas_pago[] = $subc;
  269. }
  270. }
  271. }
  272. }
  273. /// añadimos todas las subcuentas de caja
  274. $sql = "SELECT * FROM co_subcuentas WHERE idcuenta IN "
  275. . "(SELECT idcuenta FROM co_cuentas WHERE codejercicio = "
  276. . $this->ejercicio->var2str($this->ejercicio->codejercicio)." AND idcuentaesp = 'CAJA');";
  277. $data = $this->db->select($sql);
  278. if($data)
  279. {
  280. foreach($data as $d)
  281. {
  282. $this->subcuentas_pago[] = new subcuenta($d);
  283. }
  284. }
  285. }
  286. else
  287. {
  288. $this->new_error_msg('Ejercicio no encontrado.');
  289. }
  290. }
  291. }
  292. private function check_recibo()
  293. {
  294. if($this->factura)
  295. {
  296. $this->recibo->nombreproveedor = $this->factura->nombre;
  297. $this->recibo->cifnif = $this->factura->cifnif;
  298. if($this->recibo->estado != 'Pagado')
  299. {
  300. $this->recibo->coddivisa = $this->factura->coddivisa;
  301. $this->recibo->tasaconv = $this->factura->tasaconv;
  302. $this->recibo->codpago = $this->factura->codpago;
  303. $this->recibo->codserie = $this->factura->codserie;
  304. $cbc = new cuenta_banco_proveedor();
  305. foreach($cbc->all_from_proveedor($this->recibo->codproveedor) as $cuenta)
  306. {
  307. if( is_null($this->recibo->codcuenta) )
  308. {
  309. $this->recibo->codcuenta = $cuenta->codcuenta;
  310. $this->recibo->iban = $cuenta->iban;
  311. $this->recibo->swift = $cuenta->swift;
  312. }
  313. }
  314. }
  315. $this->recibo->save();
  316. }
  317. }
  318. private function sync_factura()
  319. {
  320. $recibo_factura = new recibo_factura();
  321. $recibo_factura->sync_factura_prov($this->factura);
  322. /// ¿Hay errores?
  323. foreach($recibo_factura->errors as $err)
  324. {
  325. $this->new_error_msg($err);
  326. }
  327. $recibo_factura->errors = array();
  328. }
  329. }