File: /var/www/html/wp-content/plugins/ganryu_shop/model/Purchase.php
<?php
require_once dirname(__FILE__).'/Abstract.php';
class ganryu_shop_model_Purchase extends ganryu_shop_model_Abstract{
function purchaseCode($pid){
return 'GRY'.sprintf('%010d', $pid);
}
function createPurchaseForCredit(){
$tbl = $this->tablename('purchase_log');
$dummycode = microtime().'.'.rand(10000,99999);
$sql = "
insert into $tbl(
purchasecode,
paytype,
status,
payment_status,
deliv_status,
create_date,
modify_date
)
values(
:purchasecode,
1,
0,
1,
1,
now(),
now()
)
";
$bind = array(
'purchasecode'=>$dummycode,
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
$pid = $this->lastId();
$pcode = $this->purchaseCode($pid);
$sql ="
update $tbl set
purchasecode = :purchasecode
where
purchaseid = :purchaseid
";
$bind = array('purchasecode'=>$pcode, 'purchaseid'=>$pid);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
return array('purchaseid'=>$pid, 'purchasecode'=>$pcode, 'paytype'=>1);
}
function createPurchase($userid, $data, $itemlist){
$tbl = $this->tablename('purchase_log');
$epscode = null;
$eps_paymedia = null;
if (isset($data['pay_purchasecode']) && $data['pay_purchasecode']){
$epscode = $data['pay_purchasecode'];
$eps_paymedia = $data['pay_media'];
}
if ($epscode){
$sql = "
select
purchaseid,
status
from
$tbl
where
purchasecode = :code
";
$bind = array('code'=>$epscode);
$res = $this->selectRow($sql, $bind);
if (!$res){
return false;
}
if ($res['status'] != 0){
return false;
}
$pid = $res['purchaseid'];
$addw = "";
if ($data['payment_status'] == 2){
$addw = ",payment_date = now()";
}
$sql = "
update $tbl set
userid = :userid,
paytype = :paytype,
memo = :memo,
status = 1,
payment_status = :payment_status,
deliv_status = 1,
price_sum = :price_sum,
price_tax_sum = :price_tax_sum,
count_sum = :count_sum,
get_point = :get_point,
deliv_cost = :deliv_cost,
extra_cost = :extra_cost,
tax_cost = :tax_cost,
pay_money = :pay_money,
pay_point = :pay_point,
email = :email,
create_date = now(),
modify_date = now(),
payment_media = :payment_media,
delivcost_separate_ticket = :delivcost_separate_ticket $addw
where
purchaseid = :pid
";
$bind = array(
'pid'=>$pid,
'userid'=>$userid,
'paytype'=>$data['paytype'],
'memo'=>$data['memo'],
'payment_status'=>$data['payment_status'],
'price_sum'=>$data['price_sum'],
'price_tax_sum'=>$data['price_tax_sum'],
'count_sum'=>$data['count_sum'],
'get_point'=>$data['get_point'],
'deliv_cost'=>$data['deliv_cost'],
'extra_cost'=>$data['extra_cost'],
'tax_cost'=>$data['tax_cost'],
'pay_point'=>$data['pay_point'],
'pay_money'=>$data['pay_money'],
'email'=>isset($data['email'])?$data['email']:null,
'payment_media'=>$eps_paymedia,
'delivcost_separate_ticket'=>isset($data['delivcost_separate_ticket'])?$data['delivcost_separate_ticket']:null
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
}
else{
$dummycode = microtime().'.'.rand(10000,99999);
$sql = "
insert into $tbl(
purchasecode,
userid,
paytype,
memo,
status,
payment_status,
deliv_status,
price_sum,
price_tax_sum,
count_sum,
get_point,
deliv_cost,
extra_cost,
tax_cost,
pay_money,
pay_point,
email,
create_date,
modify_date,
delivcost_separate_ticket
)
values(
:purchasecode,
:userid,
:paytype,
:memo,
1,
:payment_status,
1,
:price_sum,
:price_tax_sum,
:count_sum,
:get_point,
:deliv_cost,
:extra_cost,
:tax_cost,
:pay_money,
:pay_point,
:email,
now(),
now(),
:delivcost_separate_ticket
)
";
$bind = array(
'purchasecode'=>$dummycode,
'userid'=>$userid,
'paytype'=>$data['paytype'],
'memo'=>$data['memo'],
'payment_status'=>$data['payment_status'],
'price_sum'=>$data['price_sum'],
'price_tax_sum'=>$data['price_tax_sum'],
'count_sum'=>$data['count_sum'],
'get_point'=>$data['get_point'],
'deliv_cost'=>$data['deliv_cost'],
'extra_cost'=>$data['extra_cost'],
'tax_cost'=>$data['tax_cost'],
'pay_point'=>$data['pay_point'],
'pay_money'=>$data['pay_money'],
'email'=>isset($data['email'])?$data['email']:null,
'delivcost_separate_ticket'=>isset($data['delivcost_separate_ticket'])?$data['delivcost_separate_ticket']:null
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
$pid = $this->lastId();
$pcode = $this->purchaseCode($pid);
$sql ="
update $tbl set
purchasecode = :purchasecode
where
purchaseid = :purchaseid
";
$bind = array('purchasecode'=>$pcode, 'purchaseid'=>$pid);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
}
/*
$tbl = $this->tablename("purchase_item_log");
$sql = "
insert into $tbl(
purchaseid,
itemid,
subitemid,
category1,
category2,
category3,
num,
price_unit,
price_total,
get_point
)
values(
:purchaseid,
:itemid,
:subitemid,
:category1,
:category2,
:category3,
:num,
:price_unit,
:price_total,
:get_point
)
";
foreach ($itemlist as $itmdata){
$bind = array(
'purchaseid'=>$pid,
'itemid'=>$itmdata['item']['itemid'],
'subitemid'=>$itmdata['subitem']['subitemid'],
'category1'=>$itmdata['subitem']['category1'],
'category2'=>$itmdata['subitem']['category2'],
'category3'=>$itmdata['subitem']['category3'],
'num'=>$itmdata['num'],
'price_unit'=>$itmdata['subitem']['subprice'],
'price_total'=>$itmdata['subitem']['subprice']*$itmdata['num'],
'get_point'=>$itmdata['point']
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
}
*/
$res = $this->updatePurchaseItem($pid, $itemlist);
if (!$res){
return false;
}
return array('purchaseid'=>$pid, 'purchasecode'=>$pcode, 'paytype'=>$data['paytype']);
}
function updatePurchaseDeliv($pid, $delivlist){
$tbl = $this->tablename('purchase_deliv_log');
$sql = "
select
delivid
from
$tbl
where
purchaseid = :pid
order by delivno
";
$bind = array('pid'=>$pid);
$res = $this->selectAll($sql, $bind);
if ($res === false){
return false;
}
$curids = $res;
for($i = 0; $i < count($delivlist); $i++){
$data = $delivlist[$i];
if ($i >= count($curids)){
$sql = "
insert into $tbl(
purchaseid,
delivno,
wish_day,
wish_time,
zip1,
zip2,
prefecture_code,
address_1,
address_2,
company_name,
tel1,
tel2,
tel3,
address_name_sei,
address_name_mei,
address_name_kana_sei,
address_name_kana_mei,
itemcart,
valid
)
values(
:pid,
:delivno,
:wish_day,
:wish_time,
:zip1,
:zip2,
:prefecture_code,
:address_1,
:address_2,
:company_name,
:tel1,
:tel2,
:tel3,
:address_name_sei,
:address_name_mei,
:address_name_kana_sei,
:address_name_kana_mei,
:itemcart,
1
)
";
$bind = array(
'pid'=>$pid,
'delivno'=>$i+1,
'wish_day'=>$data['wish_day'],
'wish_time'=>$data['wish_time'],
'zip1'=>$data['zip1'],
'zip2'=>$data['zip2'],
'prefecture_code'=>$data['prefecture_code'],
'address_1'=>$data['address_1'],
'address_2'=>$data['address_2'],
'tel1'=>$data['tel1'],
'tel2'=>$data['tel2'],
'tel3'=>$data['tel3'],
'address_name_sei'=>$data['address_name_sei'],
'address_name_mei'=>$data['address_name_mei'],
'address_name_kana_sei'=>$data['address_name_kana_sei'],
'address_name_kana_mei'=>$data['address_name_kana_mei'],
'company_name'=>$data['company_name'],
'itemcart'=>$data['itemcart'],
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
}
else{
$updid = $curids[$i]['delivid'];
$sql = "
update $tbl set
delivno = :delivno,
wish_day = :wish_day,
wish_time = :wish_time,
zip1 = :zip1,
zip2 = :zip2,
prefecture_code = :prefecture_code,
address_1 = :address_1,
address_2 = :address_2,
company_name = :company_name,
tel1 = :tel1,
tel2 = :tel2,
tel3 = :tel3,
address_name_sei = :address_name_sei,
address_name_mei = :address_name_mei,
address_name_kana_sei = :address_name_kana_sei,
address_name_kana_mei = :address_name_kana_mei,
itemcart = :itemcart,
valid = 1
where
delivid = :id
";
$bind = array(
'id'=>$updid,
'delivno'=>$i+1,
'wish_day'=>$data['wish_day'],
'wish_time'=>$data['wish_time'],
'zip1'=>$data['zip1'],
'zip2'=>$data['zip2'],
'prefecture_code'=>$data['prefecture_code'],
'address_1'=>$data['address_1'],
'address_2'=>$data['address_2'],
'tel1'=>$data['tel1'],
'tel2'=>$data['tel2'],
'tel3'=>$data['tel3'],
'address_name_sei'=>$data['address_name_sei'],
'address_name_mei'=>$data['address_name_mei'],
'address_name_kana_sei'=>$data['address_name_kana_sei'],
'address_name_kana_mei'=>$data['address_name_kana_mei'],
'company_name'=>$data['company_name'],
'itemcart'=>$data['itemcart'],
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
}
}
$delids = array();
for ($i = count($delivlist); $i < count($curids); $i++){
$delids[] = $curids[$i]['delivid'];
}
if ($delids){
$wsql = join(',', $delids);
$sql = "
update $tbl set
delivno = 0,
zip1 = null,
zip2 = null,
prefecture_code = null,
address_1 = null,
address_2 = null,
company_name = null,
tel1 = null,
tel2 = null,
tel3 = null,
address_name_sei = null,
address_name_mei = null,
address_name_kana_sei = null,
address_name_kana_mei = null,
itemcart = null,
valid = 0
where
delivid in ($wsql)
";
$res = $this->query($sql);
if (!$res){
return false;
}
}
return true;
}
function getPurchaseDeliv($pid){
$tbl = $this->tablename('purchase_deliv_log');
$sql = "
select
delivid,
delivno,
date_format(wish_day, '%Y%m%d') wish_day,
wish_time,
address_name_sei,
address_name_mei,
address_name_kana_sei,
address_name_kana_mei,
zip1,
zip2,
prefecture_code,
address_1,
address_2,
address_3,
tel1,
tel2,
tel3,
company_name,
itemcart,
date_format(wish_day, '%Y%m%d') wish_day,
wish_time
from
$tbl
where
purchaseid = :pid
and
valid = 1
order by delivno
";
$bind = array('pid'=>$pid);
$res = $this->selectAll($sql, $bind);
if ($res === false){
return false;
}
return $res;
}
function updatePurchaseItem($pid, $itemlist){
$tbl = $this->tablename('purchase_item_log');
$sql = "
select
id, subitemid, num
from
$tbl
where
purchaseid = :pid
";
$bind = array('pid'=>$pid);
$res = $this->selectAll($sql, $bind);
if ($res === false){
return false;
}
$curlist = $res;
$subitemids = array();
foreach ($itemlist as $itmdata){
$curdt = null;
foreach ($curlist as $cd){
if ($itmdata['subitem']['subitemid'] == $cd['subitemid']){
$curdt = $cd;
break;
}
}
if (!$curdt){
$sql = "
insert into $tbl(
purchaseid,
itemid,
subitemid,
category1,
category2,
category3,
num,
price_unit,
price_total,
price_total_tax,
get_point
)
values(
:purchaseid,
:itemid,
:subitemid,
:category1,
:category2,
:category3,
:num,
:price_unit,
:price_total,
:price_total_tax,
:get_point
)
";
$bind = array(
'purchaseid'=>$pid,
'itemid'=>$itmdata['item']['itemid'],
'subitemid'=>$itmdata['subitem']['subitemid'],
'category1'=>$itmdata['subitem']['category1'],
'category2'=>$itmdata['subitem']['category2'],
'category3'=>$itmdata['subitem']['category3'],
'num'=>$itmdata['num'],
'price_unit'=>$itmdata['subitem']['subprice'],
'price_total'=>$itmdata['subitem']['subprice']*$itmdata['num'],
'price_total_tax'=>$itmdata['price_total_tax'],
'get_point'=>$itmdata['point']
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
}
else{
$sql = "
update $tbl set
num = :num,
price_unit = :price_unit,
price_total = :price_total,
price_total_tax = :price_total_tax,
get_point = :get_point
where
id = :id
";
$bind = array(
'id'=>$curdt['id'],
'num'=>$itmdata['num'],
'price_unit'=>$itmdata['subitem']['subprice'],
'price_total'=>$itmdata['subitem']['subprice']*$itmdata['num'],
'price_total_tax'=>$itmdata['price_total_tax'],
'get_point'=>$itmdata['point']
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
}
$subitemids[] = $itmdata['subitem']['subitemid'];
}
$delids = array();
foreach ($curlist as $cd){
if (in_array($cd['subitemid'], $subitemids)){
continue;
}
$delids[] = $cd['subitemid'];
}
if ($delids){
$idssql = join(',', $delids);
$sql = "
update $tbl set
num = 0,
price_unit = 0,
price_total = 0,
get_point = 0
where
id in ($idssql)
";
$res = $this->query($sql);
if (!$res){
return false;
}
}
return true;
}
function updatePaytype($pid, $data){
$tbl = $this->tablename('purchase_log');
$sql = "
update $tbl set
paytype = :paytype
where
purchaseid = :pid
";
$bind = array('pid'=>$pid, 'paytype'=>$data['paytype']);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
return true;
}
function updatePurchaseSum($pid, $data){
$tbl = $this->tablename('purchase_log');
$sql = "
update $tbl set
price_sum = :price_sum,
count_sum = :count_sum,
get_point = :get_point,
pay_money = :pay_money
where
purchaseid = :pid
";
$bind = array('pid'=>$pid,
'price_sum'=>$data['price_sum'],
'count_sum'=>$data['count_sum'],
'get_point'=>$data['get_point'],
'pay_money'=>$data['pay_money'],
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
return true;
}
/*
function updatePurchaseAddress($pid, $delivlist){
$tbl = $this->tablename('purchase_deliv_log');
$sql = "
update $tbl set
address_name_sei = :address_name_sei,
address_name_mei = :address_name_mei,
address_name_kana_sei = :address_name_kana_sei,
address_name_kana_mei = :address_name_kana_mei,
zip1 = :zip1,
zip2 = :zip2,
prefecture_code = :prefecture_code,
address_1 = :address_1,
address_2 = :address_2,
tel1 = :tel1,
tel2 = :tel2,
tel3 = :tel3,
company_name = :company_name
where
purchaseid = :pid
";
$bind = array(
'address_name_sei'=>$data['address_name_sei'],
'address_name_mei'=>$data['address_name_mei'],
'address_name_kana_sei'=>$data['address_name_kana_sei'],
'address_name_kana_mei'=>$data['address_name_kana_mei'],
'zip1'=>$data['zip1'],
'zip2'=>$data['zip2'],
'prefecture_code'=>$data['prefecture_code'],
'address_1'=>$data['address_1'],
'address_2'=>$data['address_2'],
'tel1'=>$data['tel1'],
'tel2'=>$data['tel2'],
'tel3'=>$data['tel3'],
'company_name'=>$data['company_name'],
'pid'=>$pid
);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
return true;
}
*/
function getPurchaseList($pg, $num, $data){
$tbl = $this->tablename('purchase_log');
$w = "";
$b = array();
if (isset($data['userid']) && $data['userid']){
$w .= " and userid = :userid";
$b['userid'] = $data['userid'];
}
if (isset($data['deliv_status']) && $data['deliv_status']){
$w .= " and deliv_status = :deliv_status";
$b['deliv_status'] = $data['deliv_status'];
}
$sql = "
select
count(*) ct
from
$tbl
where
1
$w
";
$bind = $b;
$res = $this->selectRow($sql, $bind);
if ($res === false){
return false;
}
$ct = $res['ct'];
if (!$ct){
return $this->searchResult0();
}
$sql = "
select
purchaseid,
purchasecode,
userid,
paytype,
status,
payment_status,
deliv_status,
date_format(create_date, '%Y%m%d%H%i%s') create_date,
date_format(deliv_date, '%Y%m%d%H%i%s') deliv_date,
price_sum,
price_tax_sum,
count_sum,
tax_cost,
deliv_cost,
extra_cost,
pay_point,
pay_money
from
$tbl
where
1
$w
order by create_date desc
";
$sql .= $this->searchLimit($pg, $num);
$bind = $b;
$res = $this->selectAll($sql, $bind);
if ($res ===false){
return false;
}
return $this->searchResult($res, $pg, $num, $ct);
}
function getPurchase($v, $tg="purchaseid"){
$tbl = $this->tablename('purchase_log');
if ($tg == "purchaseid"){
$w = "purchaseid = :v";
$b = array('v'=>$v);
}
else if ($tg == "purchasecode"){
$w = "purchasecode = :v";
$b = array('v'=>$v);
}
else{
return false;
}
$sql = "
select
purchaseid,
purchasecode,
userid,
paytype,
status,
payment_status,
deliv_status,
date_format(create_date, '%Y%m%d%H%i%s') create_date,
date_format(payment_date, '%Y%m%d%H%i%s') payment_date,
date_format(deliv_date, '%Y%m%d%H%i%s') deliv_date,
price_sum,
price_tax_sum,
count_sum,
address_name_sei,
address_name_mei,
address_name_kana_sei,
address_name_kana_mei,
zip1,
zip2,
prefecture_code,
address_1,
address_2,
tel1,
tel2,
tel3,
company_name,
tax_cost,
deliv_cost,
extra_cost,
pay_money,
pay_point,
get_point,
email,
memo,
delivcost_separate_ticket
from
$tbl
where
$w
";
$bind = $b;
$res = $this->selectRow($sql, $bind);
if ($res === false){
return false;
}
return $res;
}
function getPurchaseItem($pid){
$tbl = $this->tablename('purchase_item_log');
$sql = "
select
id,
itemid,
subitemid,
category1,
category2,
category3,
num,
price_unit,
price_total,
price_total_tax
from
$tbl
where
purchaseid = :purchaseid
order by itemid asc
";
$bind = array('purchaseid'=>$pid);
$res = $this->selectAll($sql, $bind);
if ($res === false){
return false;
}
return $res;
}
function getPurchaseItemCart($itemlist){
$ar = array();
foreach ($itemlist as $itm){
if (!$itm['num']){
continue;
}
$v = $itm['subitemid'];
if ($itm['num'] > 1){
$v .= ".".$itm['num'];
}
$ar[] = $v;
}
return join(',', $ar);
}
function searchPurchaseList($data){
$tbl = $this->tablename('purchase_log');
$w = "";
$b = array();
if (isset($data['pid']) && $data['pid']){
$w .= " and (purchaseid = :pid or purchasecode = :pid)";
$b['pid'] = $data['pid'];
}
if (isset($data['pdt']) && $data['pdt']){
$w .= " and date_format(create_date, '%Y%m%d') = :pdt";
$b['pdt'] = $data['pdt'];
}
if (isset($data['payst']) && $data['payst']){
$w .= " and payment_status = :payst";
$b['payst'] = $data['payst'];
}
if (isset($data['dlvst']) && $data['dlvst']){
$w .= " and deliv_status = :dlvst";
$b['dlvst'] = $data['dlvst'];
}
if (isset($data['uorg']) && $data['uorg']){
if ($data['uorg'] == 1) $w = " and userid != 0";
else if ($data['uorg'] == 2) $w = " and userid = 0";
}
if (isset($data['uname']) && $data['uname']){
$w .= " and exists(select * from wp_users w where w.ID = t.userid and w.display_name like :uname)";
$b['uname'] = "%".$data['uname']."%";
}
if (isset($data['status_out0']) && $data['status_out0']){
$w .= " and status != 0";
}
$sqlblock = "
from
$tbl t
where
1 $w
";
$bind = $b;
$sql = "select count(*) ct $sqlblock";
$res = $this->selectRow($sql, $bind);
if ($res === false){
return false;
}
$ct = $res['ct']+0;
if (!$ct){
return $this->searchResult0();
}
$sql = "
select
purchaseid,
purchasecode,
userid,
address_name_sei,
address_name_mei,
prefecture_code,
price_sum,
count_sum,
get_point,
payment_status,
deliv_status,
date_format(create_date, '%Y%m%d%H%i%s') create_date,
date_format(deliv_date, '%Y%m%d%H%i%s') deliv_date,
email
$sqlblock
order by create_date desc
";
if ($data['num']){
$sql .= $this->searchLimit($data['pg'], $data['num']);
}
$res = $this->selectAll($sql, $bind);
if ($res === false){
return false;
}
$list = $res;
return $this->searchResult($list, $data['pg'], $data['num'], $ct);
}
function updateStatus($pid, $tg, $st){
$tbl = $this->tablename('purchase_log');
$updsql = "";
$updb = array();
if ($tg == "payment_status" && $st == 2){
$updsql = ',payment_date = now()';
}
if ($tg == "deliv_status" && $st == 2){
$updsql = ',deliv_date = now()';
}
$sql = "
update $tbl set
$tg = :st
$updsql
where
purchaseid = :pid
";
$bind = array('st'=>$st, 'pid'=>$pid);
$bind = array_merge($bind, $updb);
$res = $this->query($sql, $bind);
if (!$res){
return false;
}
return true;
}
}