<?php /** * eSales Media oxVoucher for Contao Open Source CMS * * Copyright (c) 2015 eSales Media * * @author Benjamin Roth [benjamin@esales-media.de] * @license proprietary */ namespace eSM_oxVoucher; class VoucherHandler extends Voucher { /** * Oxid Database Object * @var \Database|null */ protected $oxDB = null; /** * voucher database result array * @var Array */ protected $arrVoucher = array(); /** * Import Oxid database instance */ public function __construct($strOxId) { $this->oxDB = Voucher::getOxDbInstance(); $objSQL = $this->oxDB->prepare("SELECT vs.oxid as 'OXSERIEID', vs.OXSERIENR, vs.OXSERIEDESCRIPTION, vs.OXDISCOUNT AS 'OXSERIEDISCOUNT', UNIX_TIMESTAMP(vs.OXBEGINDATE) as 'OXBEGINDATE', UNIX_TIMESTAMP(vs.OXENDDATE) as 'OXENDDATE', v.OXID, UNIX_TIMESTAMP(v.OXDATEUSED) as 'OXDATEUSED', v.OXORDERID, v.OXUSERID, v.OXVOUCHERNR, v.OXDISCOUNT FROM oxvouchers as v, oxvoucherseries as vs WHERE vs.OXID = v.OXVOUCHERSERIEID AND v.OXID = ?"); $objResult = $objSQL->execute($strOxId); if ($objResult->numRows) { $this->arrVoucher = $objResult->row(); } parent::__construct(); } function __get($name) { if ($this->arrVoucher[strtoupper($name)]) { return $this->arrVoucher[strtoupper($name)]; } return null; } public function isValid() { if ((is_null($this->oxorderid) || $this->oxorderid == '') && (is_null($this->oxdateused)) AND $this->getRemainingVal() > 0 && $this->isValidTime()) { return true; } return false; } public function isValidTime() { $Today = new \Date(); if ((is_null($this->oxbegindate) || $this->oxbegindate <= $Today->tstamp) && (is_null($this->oxenddate) || $this->oxenddate >= $Today->tstamp)) { return true; } return false; } public function getUsedVal() { // Voucher remaining value $objSQL = $this->oxDB->prepare("SELECT SUM(OXDISCOUNT) as 'USEDDISCOUNT' FROM oxvouchers_usage WHERE OXDATEUSED > 0 AND OXVOUCHERID = ?"); $objResult = $objSQL->execute($this->oxid); if ($objResult->numRows < 1) { $fUsedVal = 0.00; } else { $fUsedVal = floatval($objResult->USEDDISCOUNT); } return $fUsedVal; } public function getRemainingVal() { return $this->oxseriediscount - $this->getUsedVal(); } public function deductValue($fVal) { $fRemainingVal = $this->getRemainingVal(); if ($fVal > $fRemainingVal) { $fVal = $fRemainingVal; } $arrData = array ( 'OXVOUCHERID' => \Input::post('OXID'), 'OXDATEUSED' => date('Y-m-d'), 'OXORDERID' => '_BARVERKAUF_', 'OXDISCOUNT' => $fVal, ); $objSQL = $this->oxDB->prepare("INSERT INTO oxvouchers_usage %s"); $objSQL->set($arrData)->execute(); if ($fVal == $fRemainingVal) { $arrData = array ( 'OXDATEUSED' => date('Y-m-d'), 'OXORDERID' => '_BARVERKAUF_', 'OXDISCOUNT' => $this->oxseriediscount, ); $objSQL = $this->oxDB->prepare("UPDATE oxvouchers %s WHERE OXID = ?"); $objSQL->set($arrData)->execute($this->oxid); } } }