PVT成本计算

feature/pay
lyt 8 years ago
parent ae36fe72e9
commit dff41407ce

@ -3,6 +3,29 @@ defined('BASEPATH') OR exit('No direct script access allowed');
class Order_finance extends CI_Controller {
/*!
* 基本流程
* * 获取拼团类别: PVT?
* * 获取拼团总人数, 价格人等
* * 分别计算每次拼团成本
* * * 写入report_tour
* * 所有产品总成本
* * * 写入report_order
* END
*/
/*!
* GCI_groupType
* 1 - PVT
* 2 - combine
*/
public function __construct(){
parent::__construct();
$this->load->helper('array');
$this->load->model('OrderFinance_model');
mb_regex_encoding("UTF-8");
}
public function index()
{
@ -12,55 +35,82 @@ class Order_finance extends CI_Controller {
* 单团财务表计算
* @date 2018-07-18
* @param integer $coli_sn 订单主表key
* @return [type] [description]
* @return [type] [description]
*/
public function single_order_report($coli_sn=0)
{
$combineNo_arr = $this->OrderFinance_model->get_order_combineNo($coli_sn);
$group_type_arr = array_unique(array_map(function($ele){return $ele->GCI_groupType;}, $combineNo_arr));
// $this->output->set_content_type('application/json')->set_output(json_encode($combineNo_arr));
// $this->output->set_content_type('application/json')->set_output(json_encode($group_type_arr));
foreach ($combineNo_arr as $kc => $vc) {
if ($vc->GCI_groupType == 1) {
$pvt_cost = $this->pvt_basic($vc->GCI_combineNo);
} else if ($vc->GCI_groupType == 2) {
$combine_cost = $this->combine_basic($vc->GCI_combineNo);
}
}
return;
}
/*!
* 最基本的订单
* 基本拼团
* * 仅含有一个产品
* @example 180712534
* @date 2018-07-18
* @param integer $coli_sn 订单主表key
* @return [type] [description]
* @param string $combineNo
* @return [type] [description]
*/
public function basic($coli_sn=0)
public function combine_basic($combineNo="")
{
# code...
}
/*!
* 获取相同的产品编号
* pvt计算
* @example 180515061M
* @date 2018-07-18
* @param string $tour_code 产品编号
* @return array 含相同产品的数组
*/
public function get_equaltour($tour_code="")
public function pvt_basic($combineNo="", $coli_sn=0)
{
$equal_tour = null;
$all_equals = $this->equal_tours();
foreach ($all_equals as $key => $equal) {
if (in_array($tour_code, $equal)) {
$equal_tour = $equal;
break;
}
$ret = new stdClass();
$ret->tour = array();
$all_orders = $this->OrderFinance_model->get_all_combine_order($combineNo);
if (empty($all_orders)) {
return null;
}
return $equal_tour;
}
/** 产品编号不同实际是同一产品 */
public function equal_tours()
{
return array(
array("SHSIC-31", "SHSIC-41"),
array("SHSIC-32", "SHSIC-42"),
array("SHSIC-33", "SHSIC-43"),
array("SHSIC-34", "SHSIC-44")
);
// 预定的产品数
$ret->tour_count = count(array_unique(array_map(function($ele) {return $ele->PAG_Code;}, $all_orders)));
$ret->person_num = $this->OrderFinance_model->get_order_person_num($coli_sn);
bcscale(2);
$tour_s = new stdClass();
$combine_cost = $this->OrderFinance_model->get_combine_sumMoney($combineNo);
$tour_s->startdate = $all_orders[0]->COLD_StartDate;
// $tour_s->person_grade = ($all_orders[0]->COLD_PersonNum + $all_orders[0]->COLD_ChildNum );
$tour_s->cost_category = $combine_cost->cost_category;
$tour_s->cost_sum = $combine_cost->cost_sum;
$tour_s->person_cost = bcdiv($tour_s->cost_sum, $ret->person_num);
$tour_s->comment = "按PVT,共" . $ret->person_num . "人";// 150
$pag_sns = array_values(array_unique(array_map(function($ele) {return $ele->COLD_ServiceSN;}, $all_orders)));
$pags_info = $this->OrderFinance_model->get_pag_info(implode(',', $pag_sns));
$tour_s->PAG_Code = substr(implode(",", array_values(array_unique(array_map(function($ele) {return $ele->PAG_Code;}, $pags_info)))), 0, 50) ; // TODO 限制50
$tour_s->vendor_name = implode(",", array_values(array_unique(array_map(function($ele) {return $ele->VEI2_CompanyBN;}, $pags_info)))) ; // 50
$tour_s->pag_name = substr(implode(";\r\n", array_map(function($ele) {return $ele->PAG_Title;}, $pags_info)), 0, 200) ; // TODO 限制200
$ret->tour[0] = $tour_s;
if ( $ret->tour_count > 1 ) {
} else {
}
$ret->order_cost = array_sum(array_map(function($ele) {return $ele->cost_sum;}, $ret->tour));
$this->output->set_content_type('application/json')->set_output(json_encode($ret));
return;
}
/*!
* 获取允许拼团的数组
* @date 2018-07-18
* @param string $tour_code 产品编号
* @return array 含允许拼团产品编号的数组
*/
public function get_allowed_combine($tour_code="")
{
$allowed = null;
@ -73,12 +123,18 @@ class Order_finance extends CI_Controller {
}
return $allowed;
}
/** 不同产品但部分行程相同所以允许拼团 */
/** 允许拼团的不同编号产品 */
public function allowed_combine()
{
return array(
// * 不同产品但部分行程相同所以允许拼团 *
array("XASIC-15", "XASIC-41"),
array("BJSIC-47", "BJSIC-41")
array("BJSIC-47", "BJSIC-41"),
// * 产品编号不同实际是同一产品 *
array("SHSIC-31", "SHSIC-41"),
array("SHSIC-32", "SHSIC-42"),
array("SHSIC-33", "SHSIC-43"),
array("SHSIC-34", "SHSIC-44")
);
}

@ -2,8 +2,92 @@
defined('BASEPATH') OR exit('No direct script access allowed');
class OrderFinance_model extends CI_Model {
function __construct() {
parent::__construct();
$this->HT = $this->load->database('HT', TRUE);
}
/** 订单的所有拼团号 */
public function get_order_combineNo($coli_sn=0)
{
$sql = "SELECT gci.GCI_combineNo,gci.GCI_groupType
from GroupCombineInfo gci
inner join BIZ_ConfirmLineInfo coli on gci.GCI_GRI_SN=COLI_GRI_SN
where coli.COLI_SN=$coli_sn
group by gci.GCI_combineNo,gci.GCI_groupType";
return $this->HT->query($sql)->result();
}
/** 拼团号下的所有订单 */
public function get_all_combine_order($combineNo="")
{
$sql = "SELECT gci.GCI_combineNo,gci.GCI_VendorOrderId
,COLI_SN,coli_ID--,COLI_ApplyDate,COLI_GroupCode
,COLD_SN,cold.COLD_ServiceSN--,COLD_EndDate
,PAG_Code ,pag_sub.PAGS_CN_Title, cold.COLD_StartDate,PAG_DefaultVEI_SN
,COLD_PersonNum ,COLD_ChildNum , cold.COLD_StartDate,COLD_EndDate
--,PAG_Title
from GroupCombineInfo gci
inner join BIZ_ConfirmLineInfo coli on gci.GCI_GRI_SN=COLI_GRI_SN
inner join BIZ_ConfirmLineDetail cold on cold.COLD_COLI_SN=coli.COLI_SN
left join BIZ_PackageInfo pag on PAG_SN=COLD_ServiceSN
left join BIZ_PackageInfoSub pag_sub on pag_sub.PAGS_SN=COLD_ServiceSN2
where gci.GCI_combineNo =?
order by GCI_combineNo,cold.COLD_StartDate";
return $this->HT->query($sql, array($combineNo))->result();
}
/** 拼团的成本明细,总成本信息 */
public function get_combine_sumMoney($combineNo="")
{
$ret = new stdClass();
$sql = "SELECT GCOD_operationType,GCOD_subType,SUM(cast(gcod.GCOD_sumMoney as float)) cost
from GroupCombineOperationDetail gcod
where gcod.GCOD_GCI_combineNo =?
group by GCOD_GCI_combineNo,GCOD_operationType,GCOD_subType";
$ret->cost_detail = $this->HT->query($sql, array($combineNo))->result();
$ret->cost_sum = array_sum(array_map(function ($ele){return $ele->cost;}, $ret->cost_detail));
$ret->cost_category = array();
$ret->cost_category['water'] = 0;
$ret->cost_category['guide_meal'] = 0;
$ret->cost_category['otherCosts'] = 0;
$ret->cost_category['guiderOperations'] = 0;
$ret->cost_category['touristCarOperations'] = 0;
$ret->cost_category['sceneryOperations'] = 0;
foreach ($ret->cost_detail as $key => $value) {
if ($value->GCOD_operationType=='otherCosts' && $value->GCOD_subType=='客人水费') {
$ret->cost_category['water'] += $value->cost;
continue;
} elseif ($value->GCOD_operationType=='otherCosts' && $value->GCOD_subType=='餐补(司陪)') {
$ret->cost_category['guide_meal'] += $value->cost;
continue;
}
$ret->cost_category[$value->GCOD_operationType] += $value->cost;
}
return $ret;
}
/** 获取订单总人数 */
public function get_order_person_num($coli_sn=0)
{
$sql = "SELECT BPL_BPE_SN
from BIZ_ConfirmLineDetail cold
inner join BIZ_BookPeopleList bpl on bpl.BPL_COLD_SN=cold.COLD_SN
where cold.COLD_COLI_SN=$coli_sn
group by bpl.BPL_BPE_SN";
return $this->HT->query($sql)->num_rows();
}
/** 获取产品信息:产品名称,供应商等 */
public function get_pag_info($PAG_SN_str="")
{
$sql = "SELECT pag.PAG_SN,PAG_Code,PAG_DefaultVEI_SN,PAG_Title,vei2.VEI2_CompanyBN
from BIZ_PackageInfo pag
inner join VEndorInfo2 vei2 on VEI2_VEI_SN=PAG_DefaultVEI_SN and VEI2_LGC=2
where PAG_SN in ($PAG_SN_str) ";
return $this->HT->query($sql)->result();
}
}

Loading…
Cancel
Save