export_name . '-' . date('Y-m-d H:i:s', time());
}
function searchOptions(){
return array(
);
}
function _filter($filter,$tableAlias=null,$baseWhere=null){
$where = "1";
if(isset($filter['product_bn'])){
$itemsObj = $this->app->model("appropriation_items");
$rows = $itemsObj->getOrderIdByPbn($filter['product_bn']);
$appropriationId[] = 0;
foreach($rows as $row){
$appropriationId[] = $row['appropriation_id'];
}
$where .= ' AND appropriation_id IN ('.implode(',', $appropriationId).')';
unset($filter['product_bn']);
}
if(isset($filter['product_barcode'])){
$itemsObj = $this->app->model("appropriation_items");
$rows = $itemsObj->getOrderIdByPbarcode($filter['product_barcode']);
$appropriationId[] = 0;
foreach($rows as $row){
$appropriationId[] = $row['appropriation_id'];
}
$where .= ' AND appropriation_id IN ('.implode(',', $appropriationId).')';
unset($filter['product_barcode']);
}
return parent::_filter($filter,$tableAlias,$baseWhere)." AND ".$where;
}
function prepared_import_csv_row($row,$title,&$Tmpl,&$mark,&$newObjFlag,&$msg){
$fileData = $this->import_data;
if( !$fileData ){
$fileData = array();
}
if(!empty($row)){
$fileData[ $this->key++] = $row;
#获取所有csv导入数据数组
$this->import_data = $fileData;
}
return null;
}
function finish_import_csv(){
#获取所有已读取的csv导入数据
$fileData = $this->import_data;
#判断是否值导入了一笔调拨单
if( substr($fileData[2][0],0,1) != '*' ){
echo "";exit;
}
$basicMaterialObj = app::get('material')->model('basic_material');
$oBranch = app::get('ome')->model('branch');
$oCorp = app::get('ome')->model('dly_corp');
$oBranchProduct = app::get('ome')->model('branch_product');
$oStock = kernel::single('console_stock_products');
$branchLib = kernel::single('ome_branch');
$channelLib = kernel::single('channel_func');
#判断经办人是否填写
if(!$fileData[1][2]){
echo "";exit;
}
#物流公司
if($fileData[1][3]){
$corp_id = $oCorp->dump(array('name'=>$fileData[1][3]),'corp_id');
if(!$corp_id){
echo "";exit;
}
}
#调出仓库
if(!$fileData[1][4]){
echo "";exit;
}
$from_branch_id = $oBranch->dump(array('name'=>$fileData[1][4]),'branch_id');
if(!$from_branch_id){
echo "";exit;
}
$from_wms_id = $branchLib->getWmsIdById($from_branch_id['branch_id']);
$from_is_selfWms = $channelLib->isSelfWms($from_wms_id);//调出仓库是否自有仓储
//调入仓库
if(!$fileData[1][5]){
echo "";exit;
}
$to_branch_id = $oBranch->dump(array('name'=>$fileData[1][5]),'branch_id');
if(!$to_branch_id){
echo "";exit;
}
$to_wms_id = $branchLib->getWmsIdById($to_branch_id['branch_id']);
$to_is_selfWms = $channelLib->isSelfWms($to_wms_id);//调入仓库是否自有仓储
$appropriationType = app::get('ome')->getConf('taoguanallocate.appropriation_type');
$appropriation_type = $appropriationType=='directly'?1:2;
if($appropriation_type==1&&(!$from_is_selfWms||!$to_is_selfWms)){
echo "";exit;
}
#经办人
$operator = $fileData[1][2];
#备注
$memo = $fileData[1][6];
#错误信息
$msg = array();
#去掉标题信息和调拨单信息
unset($fileData['']);unset($fileData[1]);unset($fileData[2]);
$arr_product_bns = array();
foreach ($fileData as $key => $value) {
$product_bn = trim($value[1]);
#货品货号
if(!$product_bn){
echo "";exit;
}
if (!empty($arr_product_bns) && in_array($product_bn,$arr_product_bns)){
echo "";exit;
}
$arr_product_bns[] = $product_bn;
#调拨数量
$nums = intval($value[6]);
if( $nums <= 0 ){
echo "";exit;
}
$product = $basicMaterialObj->dump(array('material_bn'=>$product_bn), '*');
if(!$product){
echo "";exit;
}
$from_branch_product = $oBranchProduct->dump(array('branch_id'=>$from_branch_id['branch_id'],'product_id'=>$product['bm_id']),'*');
if( !$from_branch_product ){
echo "";exit;
}
$from_branch_num = $oStock->get_branch_usable_store($from_branch_id['branch_id'],$product['bm_id']);
$to_branch_num = $oStock->get_branch_usable_store($to_branch_id['branch_id'],$product['bm_id']);
if( $from_branch_num < $nums){
echo "";exit;
}
if((!kernel::single('taoguaninventory_inventorylist')->checkproductoper($product['bm_id'],$from_branch_id['branch_id']))||(!kernel::single('taoguaninventory_inventorylist')->checkproductoper($product['bm_id'],$to_branch_id['branch_id']))){
echo "";exit;
}
#组织数据
$data['from_pos_id'] = 0;
$data['to_pos_id'] = 0;
$data['from_branch_id'] = $from_branch_id['branch_id'];
$data['to_branch_id'] = $to_branch_id['branch_id'];
$data['product_id'] = $product['bm_id'];
$data['from_branch_num'] = $from_branch_num;
$data['to_branch_num'] = $to_branch_num;
$data['num'] = $nums;
$adata[] = $data;
}
#日志数据
$log_data['adata'] = $adata;
$log_data['appropriation_type'] = $appropriation_type;
$log_data['memo'] = $memo;
$log_data['operator'] = $operator;
$log_data['msg'] = $msg;
$allocateObj = kernel::single('console_receipt_allocate');
$result = $allocateObj->to_savestore($adata,$appropriation_type,$memo,$operator,$msg);
if($result){
#调拔出库通知已修改为审核时才发起通知
#$iostockObj->notify_otherstock(1,$result,'create');
ome_operation_log::insert('taoguanallocate_appropriation_addtransfer_allocation', $log_data, '调拨单新建成功');
echo "";exit;
}else{
ome_operation_log::insert('taoguanallocate_appropriation_addtransfer_allocation', $log_data, '调拨单新建失败');
echo "";exit;
}
}
function prepared_import_csv_obj($data,$mark,$goodsTmpl,&$msg = ''){
return null;
}
function exportTemplate($filter){
foreach ($this->io_title($filter) as $v){
$title[] = kernel::single('base_charset')->utf2local($v);
}
return $title;
}
function io_title( $filter=null,$ioType='csv' ){
switch( $ioType ){
case 'csv':
default:
$this->oSchema['csv']['appropriation'] = array(
'*:调拨单号' => 'appropriation_no',
'*:建单日期' => 'create_time',
'*:经办人' => 'operator_name',
'*:物流公司' => 'logi_name',
'*:调出仓库名称' => 'from_branch',
'*:调入仓库名称' => 'to_branch',
'*:备注' => 'memo',
);
$this->oSchema['csv']['items'] = array(
'*:调拨单号' => 'appropriation_no',
'*:货号' => 'bn',
'*:货品名称' => 'product_name',
'*:条形码' => 'barcode',
'*:调出仓库数量' => 'from_branch_num',
'*:调入仓库数量' => 'to_branch_num',
'*:调拨数量' => 'num',
);
break;
}
$this->ioTitle[$ioType][$filter] = array_keys( $this->oSchema[$ioType][$filter] );
return $this->ioTitle[$ioType][$filter];
}
function export_csv($data,$exportType = 1 ){
$output = array();
foreach( $data['title'] as $k => $val ){
$output[] = $val."\n".implode("\n",(array)$data['content'][$k]);
}
echo implode("\n",$output);
}
function fgetlist_csv( &$data,$filter,$offset,$exportType = 1 )
{
$basicMaterialLib = kernel::single('material_basic_material');
$basicMaterialBarcode = kernel::single('material_basic_material_barcode');
@ini_set('memory_limit','1024M'); set_time_limit(0);
$this->export_flag = true;
$max_offset = 1000; // 最多一次导出10w条记录
if ($offset>$max_offset) return false;// 限制导出的最大页码数
if( !$data['title']['appropriation'] ){
$title = array();
foreach( $this->io_title('appropriation') as $k => $v ){
$title[] = $this->charset->utf2local($v);
}
$data['title']['appropriation'] = '"'.implode('","',$title).'"';
}
if( !$data['title']['items'] ){
$title = array();
foreach( $this->io_title('items') as $k => $v )
$title[] = $this->charset->utf2local($v);
$data['title']['items'] = '"'.implode('","',$title).'"';
}
$limit = 100;
if( !$list=$this->getList('appropriation_id',$filter,$offset*$limit,$limit) ) return false;
foreach( $list as $aFilter ){
if( !$appropriation = $this->dump($aFilter['appropriation_id'])){
return false;
}
if( !$items = $this->db->select("SELECT * FROM sdb_taoguanallocate_appropriation_items WHERE appropriation_id=".$appropriation['appropriation_id'])){
return false;
}
$from_branch = $this->db->select("SELECT name FROM sdb_ome_branch WHERE branch_id=".$items[0]['from_branch_id']);
$to_branch = $this->db->select("SELECT name FROM sdb_ome_branch WHERE branch_id=".$items[0]['to_branch_id']);
$corp_info = $this->db->select("SELECT name FROM sdb_ome_dly_corp WHERE corp_id=".$appropriation['corp_id']);
$appropriationRow = array();
$appropriationRow['*:调拨单号'] = $appropriation['appropriation_no'];
$appropriationRow['*:生成日期'] = date('Y-m-d H:i:s', $appropriation['create_time']);
$appropriationRow['*:经办人'] = $appropriation['operator_name'];
$appropriationRow['*:物流公司'] = $corp_info[0]['name'];
$appropriationRow['*:调出仓库名称'] = $from_branch[0]['name'];
$appropriationRow['*:调入仓库名称'] = $to_branch[0]['name'];
$appropriationRow['*:备注'] = $appropriation['memo'];
$data['content']['appropriation'][] = $this->charset->utf2local('"'.implode( '","', $appropriationRow ).'"');
foreach ($items as $item)
{
//基础物料信息
$product = $basicMaterialLib->getBasicMaterialBybn($item['bn']);
$product['barcode'] = $basicMaterialBarcode->getBarcodeById($product['bm_id']);
$itemsRow = array();
$itemsRow['*:调拨单号'] = $appropriation['appropriation_no'];
$itemsRow['*:货号'] = $item['bn'];
$itemsRow['*:货品名称'] = $item['product_name'];
//$itemsRow['*:规格'] = $product['specifications'];
$itemsRow['*:条形码'] = $product['barcode'];
$itemsRow['*:调出仓数量'] = $item['from_branch_num'];
$itemsRow['*:调入仓数量'] = $item['to_branch_num'];
$itemsRow['*:调拨数量'] = $item['num'];
$data['content']['items'][] = $this->charset->utf2local('"'.implode( '","', $itemsRow ).'"');
}
}
return true;
}
/**
* 获取DataByBranch
* @param mixed $op_name op_name
* @param mixed $branch branch
* @return mixed 返回结果
*/
public function getDataByBranch($op_name,$branch){
$time = strtotime(date('Y-m-d',time()));
$sql = 'SELECT A.appropriation_id FROM '.
kernel::database()->prefix.'taoguanallocate_appropriation as A LEFT JOIN '.
kernel::database()->prefix.'taoguanallocate_appropriation_items as I ON A.appropriation_id=I.appropriation_id '.
'WHERE A.type=\'1\' and A.operator_name=\''.$op_name.'\' and I.from_branch_id=\''.$branch.
'\' and A.create_time>=\''.$time.'\' and A.create_time<\''.($time+86400).'\'';
$row = $this->db->select($sql);
if($row){
return intval($row[0]['appropriation_id']);
}else{
return 0;
}
}
/**
* 删除调拔单
*
*/
function deleteAppropriation($appropriation_id) {
$db = kernel::database();
$db->beginTransaction();
$db->exec('delete from sdb_taoguanallocate_appropriation WHERE appropriation_id='.$appropriation_id);
$db->exec('delete from sdb_taoguanallocate_appropriation_items WHERE appropriation_id='.$appropriation_id);
$iostockorder = app::get('taoguaniostockorder')->model('iso')->dump(array('original_id'=>$appropriation_id,'type_id'=>40),'confirm,iso_id');
if ($iostockorder['confirm']=='N'){
$db->exec('delete from sdb_taoguaniostockorder_iso WHERE iso_id='.$iostockorder['iso_id']);
$db->exec('delete from sdb_taoguaniostockorder_iso_items WHERE iso_id='.$iostockorder['iso_id']);
$db->commit();
return true;
}else{
$db->rollBack();
return false;
}
}
#获取调拨单号
function getAppropriatioInfo($iso_id= null){
$sql = 'select
appropriation_no
from sdb_taoguanallocate_appropriation appropriation
left join sdb_taoguaniostockorder_iso iso
on iso.original_id=appropriation.appropriation_id
where iso.iso_id='.$iso_id;
$appropriation_no = $this->db->selectRow($sql);
return $appropriation_no;
}
/**
* 一键审核调拔单
* @param int $appropriation_id 调拨单id
* @param string $err_msg 提示信息
* @return bool
*/
public function oneClickCheck($appropriation_id,&$err_msg)
{
$filter['appropriation_id'] = $appropriation_id;
$filter['process_status'] = array('1');
$appropriation_id = $filter['appropriation_id'];
$is_have = $this->getlist('*', $filter);
if (empty($is_have)) {
$err_msg = '此单据不需要审核';
return false;
}
kernel::database()->beginTransaction();
$approMdl = app::get('taoguanallocate')->model('appropriation');
$appros = $approMdl->db_dump(array('appropriation_id'=>$appropriation_id),'bill_type');
$affect_rows = $this->update(array('process_status' => 2, 'confirm_time' => time()),
$filter);
if (is_bool($affect_rows)) {
kernel::database()->rollBack();
$err_msg = '此单据审核失败!';
return false;
}
if(in_array($appros['bill_type'] ,array('returnnormal'))){
}
$iso_id = kernel::single('console_receipt_allocate')->do_out_iostockorder($appropriation_id, $err_msg);
if (!$iso_id) {
kernel::database()->rollBack();
return false;
}
kernel::database()->commit();
kernel::single('console_iostockorder')->doCkeck($iso_id, 0);
return true;
}
}
?>