Skip to content

Commit

Permalink
Merge pull request #140 from vhs/membershipcards
Browse files Browse the repository at this point in the history
Membershipcards
  • Loading branch information
laftho committed Nov 21, 2015
2 parents 01ea022 + 0c5398c commit 45e03db
Show file tree
Hide file tree
Showing 30 changed files with 948 additions and 20 deletions.
69 changes: 69 additions & 0 deletions app/contracts/IMemberCardService1.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php
/**
* Created by PhpStorm.
* User: Thomas
* Date: 11/20/2015
* Time: 12:14 PM
*/

namespace app\contracts;


use vhs\services\IContract;

interface IMemberCardService1 extends IContract {

/**
* @permission administrator
* @param $key
* @param $notes
* @return mixed
*/
public function RegisterGenuineCard($key, $notes);

/**
* @permission user
* @param $key
* @return mixed
*/
public function ValidateGenuineCard($key);

/**
* @permission administrator
* @param $email
* @param $key
* @return mixed
*/
public function IssueCard($email, $key);

/**
* @permission administrator
* @param $page
* @param $size
* @param $columns
* @param $order
* @param $filters
* @return mixed
*/
public function ListGenuineCards($page, $size, $columns, $order, $filters);

/**
* @permission administrator|user
* @param $userid
* @param $page
* @param $size
* @param $columns
* @param $order
* @param $filters
* @return mixed
*/
public function ListUserGenuineCards($userid, $page, $size, $columns, $order, $filters);

/**
* @permission administrator
* @param $key
* @return mixed
*/
public function GetGenuineCardDetails($key);

}
36 changes: 36 additions & 0 deletions app/domain/GenuineCard.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php
/**
* Created by PhpStorm.
* User: Thomas
* Date: 11/20/2015
* Time: 12:22 PM
*/

namespace app\domain;


use app\schema\GenuineCardSchema;
use vhs\database\wheres\Where;
use vhs\domain\Domain;
use vhs\domain\validations\ValidationResults;

class GenuineCard extends Domain {
public static function Define() {
GenuineCard::Schema(GenuineCardSchema::Type());
}

public function validate(ValidationResults &$results) {

}

/**
* @param $key
* @return GenuineCard[]
*/
public static function findByKey($key) {
return GenuineCard::where(
Where::Equal(GenuineCardSchema::Columns()->key, $key)
);
}
}

20 changes: 20 additions & 0 deletions app/endpoints/web/MemberCardService1.svc.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php
/**
* Created by PhpStorm.
* User: Thomas
* Date: 11/21/2015
* Time: 12:33 PM
*/

namespace app\endpoints\web;


use app\services\MemberCardService;
use vhs\services\endpoints\JsonEndpoint;
use vhs\services\ServiceContext;

class MemberCardService1 extends JsonEndpoint {
public function __construct() {
parent::__construct(new MemberCardService(new ServiceContext($this)));
}
}
69 changes: 61 additions & 8 deletions app/monitors/PaymentMonitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,15 @@ class PaymentMonitor extends Monitor {

/** @var Logger */
private $logger;
/** @var EmailService */
private $emailService;
private $host;

public function Init(Logger &$logger = null)
{
$this->logger = &$logger;
$this->emailService = new EmailService();

Payment::onAnyCreated([$this, "paymentCreated"]);
}

Expand All @@ -36,12 +41,10 @@ private function log($message)

public function paymentCreated($args)
{
$emailService = new EmailService();

$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$domainName = $_SERVER['HTTP_HOST'].'/';

$host = $protocol.$domainName;
$this->host = $protocol.$domainName;

/** @var Payment $payment */
$payment = Payment::find($args[0]->id);
Expand All @@ -60,6 +63,56 @@ public function paymentCreated($args)
$user = $users[0];
}

if ($payment->item_number == "vhs_card_2015") {
$this->processMembershipCardPayment($user, $payment);
} else {
$this->processMemberPayment($user, $payment);
}
}

private function processMembershipCardPayment(User $user, Payment $payment) {
if (is_null($user)) {
$this->emailService->Email(
NOMOS_FROM_EMAIL,
"[Nomos] Unknown user purchased Membership Card - " . $payment->payer_fname . " " . $payment->lname,
'admin_error',
[
'message' => $payment->fname . " " . $payment->lname . " with email "
. $payment->payer_email . " purchased a membership card but we "
. "don't have an account for them... they'll need an account before"
. " we can issue a member card."
]
);
} else {
$this->emailService->Email(
NOMOS_FROM_EMAIL,
"[Nomos] New Membership Card Purchase! - " . $payment->payer_fname . " " . $payment->lname,
'admin_membercard_purchased',
[
'email' => $payment->payer_email,
'fname' => $payment->payer_fname,
'lname' => $payment->payer_lname
]
);

$this->emailService->EmailUser(
$user,
'VHS Membership Card Purchased!',
'membercard_purchased',
[
'fname' => $user->fname
]
);

$payment->user_id = $user->id;
}

$payment->status = 1;

$payment->save();
}

private function processMemberPayment(User $user, Payment $payment) {
//TODO get membership type via item_name/item_number from payment record
/** @var Membership $membership */
$membership = Membership::findForPriceLevel($payment->rate_amount);
Expand Down Expand Up @@ -92,15 +145,15 @@ public function paymentCreated($args)
return;
}

$emailService->Email(
$this->emailService->Email(
NOMOS_FROM_EMAIL,
'[Nomos] New User Created!',
'admin_newuser',
[
'email' => $payment->payer_email,
'fname' => $payment->payer_fname,
'lname' => $payment->payer_lname,
'host' => $host,
'host' => $this->host,
'id' => $user->id
]
);
Expand All @@ -124,7 +177,7 @@ public function paymentCreated($args)
$payment->status = 1; //processed
$payment->save();

$emailService->Email(
$this->emailService->Email(
NOMOS_FROM_EMAIL,
'[Nomos] User payment made!',
'admin_payment',
Expand All @@ -137,12 +190,12 @@ public function paymentCreated($args)
]
);

$emailService->EmailUser(
$this->emailService->EmailUser(
$user,
'VHS Membership Payment Received!',
'payment',
[
'host' => $host,
'host' => $this->host,
'fname' => $user->fname,
]
);
Expand Down
11 changes: 10 additions & 1 deletion app/monitors/PaypalIpnMonitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,16 @@ public function handleCreated($args)

$payment->item_number = $ipn->item_number;
$payment->item_name = $ipn->item_name;
$payment->date = (array_key_exists("payment_date", $raw)) ? (new DateTime(urldecode($raw["payment_date"])))->format("Y-m-d H:i:s") : $ipn->created; //todo ensure timezones

$date = (array_key_exists("payment_date", $raw)) ? urldecode($raw["payment_date"]) : null;

if (!is_null($date)) {
$date = (new DateTime(substr($date, 0, strpos($date, "("))))->format("Y-m-d H:i:s");
} else {
$date = $ipn->created;
}

$payment->date = $date;

$payment->save();
}
Expand Down
37 changes: 37 additions & 0 deletions app/schema/GenuineCardSchema.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php
/**
* Created by PhpStorm.
* User: Thomas
* Date: 11/19/2015
* Time: 7:07 PM
*/

namespace app\schema;


use vhs\database\constraints\Constraint;
use vhs\database\Table;
use vhs\database\types\Type;
use vhs\domain\Schema;

class GenuineCardSchema extends Schema {
public static function init() {
$table = new Table("genuinecard");

$table->addColumn("id", Type::Int(false, 0));
$table->addColumn("key", Type::String(false, "", 255));
$table->addColumn("created", Type::DateTime(false, date("Y-m-d H:i:s")));
$table->addColumn("issued", Type::DateTime(true, null));
$table->addColumn("active", Type::Bool(false, false));
$table->addColumn("paymentid", Type::Int(true, 0));
$table->addColumn("userid", Type::Int(true, 0));
$table->addColumn("owneremail", Type::String(true, "", 255));
$table->addColumn("notes", Type::String(true, "", 255));

$table->setConstraints(
Constraint::PrimaryKey($table->columns->id)
);

return $table;
}
}
Loading

0 comments on commit 45e03db

Please sign in to comment.