public function Create($invoiceid, $gatewayid, $amount, $date = NULL, $comments = '', $userid = NULL)
 {
     if (!is_numeric($invoiceid) && !is_float($amount)) {
         throw new Exception("Invoice ID or amount in wrong format");
     }
     $inv = Invoice::getInstance();
     $invdata = $inv->FetchData($invoiceid);
     $time = Time::getInstance();
     if ($date == NULL) {
         $date = $time->UtoM(time());
     }
     $this->raw = $this->db->query_insert('Transaction', array('invoiceid' => $invoiceid, 'customerid' => $invdata['accountid'], 'date' => $date, 'amount' => $amount, 'gatewayid' => $gatewayid, 'comments' => $comments));
     $inv->Update('status', 'Paid', $invoiceid);
     $inv->Update('transactionid', $this->raw, $invoiceid);
     $inv->Update('datepaid', $date, $invoiceid);
     return $this->raw;
 }
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */
require_once '../../core.php';
//change to your gateway's name
define('GWNAME', 'othertestgateway');
define('INVOICE', (int) $_REQUEST['inv']);
define('AMOUNT', (int) $_REQUEST['received']);
define('KEY', $_REQUEST['secretkey']);
define('COMMENT', '');
$gm = GatewayModule::getInstance();
$curr = Currency::getInstance();
$service = Service::getInstance();
$invoice = Invoice::getInstance();
$tr = Transaction::getInstance();
//finding ID for this gateway
$gwid = $gm->GetID(GWNAME);
if (!$gwid) {
    die("This gateway is not activated and configured to accept payments");
}
$gmdata = $gm->FetchData($gwid);
$invdata = $invoice->FetchData(INVOICE);
$currency = $curr->FetchData($curr->GetID($gmdata['currency'], 'name'));
//$currency = $curr->GetCurrency('',$gmdata['currency']);
$gateway_data = unserialize($gmdata['data']);
if ($invdata['amount'] > AMOUNT * $currency['rate']) {
    echo "Received amount is not enough for this invoice";
    //send some notifications
    exit;
Esempio n. 3
0
 public static function UserViewInvoice($invid)
 {
     $xtpl = self::$xtpl;
     $invoice = Invoice::getInstance();
     $xtpl->assign('FINCURR', 'current');
     $xtpl->assign('INVSCURR', 'current');
     if (!is_numeric($invid)) {
         $xtpl->parse('main.viewinvoice.inverror');
     } else {
         $invdata = $invoice->FetchData($invid);
         if ($invdata['accountid'] != self::$userid) {
             $xtpl->parse('main.viewinvoice.invrights');
         } else {
             $order = Order::getInstance();
             $pkg = Package::getInstance();
             $orderdata = $order->FetchData($invdata['orderid']);
             $pkgdata = $pkg->FetchData($orderdata['productid']);
             $xtpl->assign('INV', $invdata);
             $xtpl->assign('PKG', $pkgdata);
             $xtpl->assign('ORDER', $orderdata);
             if ($invdata['status'] == 'Paid') {
                 $xtpl->parse('main.viewinvoice.invoice.paid');
             }
             $xtpl->parse('main.viewinvoice.invoice');
         }
     }
     $xtpl->parse('main.viewinvoice');
     $xtpl->parse('main');
     $xtpl->out('main');
 }
Esempio n. 4
0
 public function generateLastInv($orderid = '')
 {
     $time = Time::getInstance();
     $inv = Invoice::getInstance();
     $pkg = Package::getInstance();
     $setting = Settings::getInstance();
     if (!is_numeric($orderid) && !is_numeric($this->orderid)) {
         $result = array();
         $days = $time->add_date($time->UtoM(time()), $setting->Get('system.cron.daystonewinv'));
         $this->raw = $this->db->fetch_all_array('SELECT * FROM `Order` WHERE `status` = "Active" AND `nextdue` < "' . $days . '" AND `cycle` > 0');
         for ($i = 0; $i < count($this->raw); $i++) {
             $invdata = $inv->FetchData($this->raw[$i]['lastinv']);
             if ($time->MtoU($invdata['datedue']) < $time->MtoU($this->raw[$i]['nextdue'])) {
                 //new invoice should be generated
                 $pkgdata = $pkg->FetchData($this->raw[$i]['productid']);
                 $nextdue = $time->add_date($this->raw[$i]['nextdue'], '', $this->raw[$i]['cycle']);
                 $comment = "Order for package " . $pkgdata['name'] . " (" . $this->raw[$i]['nextdue'] . " - " . $nextdue . ")";
                 $lastinv = $inv->Create($this->raw[$i]['accountid'], $this->raw[$i]['id'], $this->raw[$i]['recuramount'], $this->raw[$i]['nextdue'], 'Unpaid', $comment);
                 $result[] = array('invoice' => $lastinv, 'order' => $this->raw[$i]['id']);
                 $this->Update('lastinv', $lastinv, $this->raw[$i]['id']);
             }
         }
         return $result;
     } else {
         if (!is_numeric($orderid)) {
             $orderid = $this->orderid;
         }
         $orderdata = $this->FetchData($orderid);
         $lastinvdata = $inv->FetchData($orderdata['lastinv']);
         if ($orderdata['status'] == 'Active' && $orderdata['cycle'] > 0 && $time->MtoU($orderdata['nextdue']) > $time->MtoU($lastinvdata['datedue'])) {
             $pkgdata = $pkg->FetchData($orderdata['productid']);
             $nextdue = $time->add_date($orderdata['nextdue'], '', $orderdata['cycle']);
             $comment = "Order for package " . $pkgdata['name'] . " (" . $orderdata['nextdue'] . " - " . $nextdue . ")";
             $lastinv = $inv->Create($orderdata['accountid'], $orderdata['id'], $orderdata['recuramount'], $orderdata['nextdue'], '', $comment);
             $this->Update($orderdata['id'], 'lastinv', $lastinv);
         }
     }
 }
Esempio n. 5
0
 public function newPayment($invid)
 {
     if (!is_numeric($this->invid) && !is_numeric($invid)) {
         throw new Exception("Invoice ID is not set or set incorrectly");
     } elseif (is_numeric($this->invid) && !is_numeric($invid)) {
         $invid = $this->invid;
     }
     $error = 0;
     $sm = ServerModule::getInstance();
     $user = User::getInstance();
     $order = Order::getInstance();
     $invoice = Invoice::getInstance();
     $time = Time::getInstance();
     $nt = Notification::getInstance();
     $invdata = $invoice->FetchData($invid);
     $users = $user->GetButch(1, '`id` = "' . $invdata['accountid'] . '"');
     $orderdata = $order->FetchData($invdata['orderid']);
     $ntarray = array('USER' => $users[0], 'INV' => $invdata, 'ORDER' => $orderdata);
     switch ($orderdata['status']) {
         case 'Active':
             $nt->Send($users, $ntarray, 'usernewpayment');
             $order->Update('nextdue', $time->add_date($orderdata['nextdue'], 0, $orderdata['cycle']), $orderdata['id']);
             break;
         case 'Pending':
             //Making all this shit for creating new account; sendmail email with access data
             try {
                 $this->Create($orderdata['id']);
             } catch (Exception $e) {
                 $admins = $user->GetButch('', '`status` = "Admin"');
                 $nterarray = array('USER' => $users[0], 'INV' => $invdata, 'MESSAGE' => $e->getMessage(), 'DEBUG' => $e);
                 $nt->Send($admins, $nterarray, 'adminservicesetuperror');
                 $error = 1;
             }
             if ($error > 0) {
                 //we need to refetch order data as we updated accessdata when created new service
                 $orderdata = $order->FetchData($invdata['orderid']);
                 $accessdata = unserialize($orderdata['accessdata']);
                 $order->orderid = $invdata['orderid'];
                 $sm->id = $order->FindModuleID();
                 $modulecreatearray = $sm->getArray('Create');
                 $acdata_to_mail = '';
                 for ($i = 0; $i < count($modulecreatearray); $i++) {
                     if (array_key_exists($modulecreatearray[$i]['name'], $accessdata)) {
                         $acdata_to_mail .= $modulecreatearray[$i]['label'] . ": " . $accessdata[$modulecreatearray[$i]['name']] . "\n";
                     }
                 }
                 $ntarray['ACCESSDATA'] = $acdata_to_mail;
                 //there email should me sent
                 $nt->Send($admins, $ntarray, 'usernewservicedetails');
                 $order->Update('status', 'Active', $invdata['orderid']);
             } else {
                 die("Error");
             }
             break;
         case 'Suspended':
             $this->Unsuspend($order->orderid);
             $order->Update('', 'status', 'Active');
             break;
         case 'Terminated':
             //there are should be some notification for admin and user about payment for terminated service or money should be returned back to the balance
             //$this->Create($order->orderid);
             //$order->Update('','status', 'Active');
             break;
         default:
             throw new Exception("Unknown order status!");
     }
 }