예제 #1
0
function getBudgetItemsByBudgetId($budgetId, $isGBK = false)
{
    global $mysql;
    $res = array();
    $arr = $mysql->DBGetAsMap(" select * from `budget_item` where `budgetId` = '?' and `isDeleted` = 'false' ORDER BY LEFT( itemCode, 2 ) ASC , ( SUBSTRING( itemCode, 2 ) ) *1 DESC ", $budgetId);
    $count = 0;
    $smallCount = array(0, 0, 0, 0, 0, 0);
    $directFee = 0;
    $isFirstSmallCount = true;
    $NOPQRSItems = array();
    foreach ($arr as $val) {
        $itemCode = $val['itemCode'];
        $itemUnit = $val['itemUnit'];
        $itemAmount = $val['itemAmount'] == "" || $val['itemAmount'] == null ? 0 : $val['itemAmount'];
        $discount = $val['discount'];
        $budgetId = $val['budgetId'];
        $itemName = $isGBK ? str2GBK($val['itemName']) : $val['itemName'];
        $itemUnit = $isGBK ? str2GBK($val['itemUnit']) : $val['itemUnit'];
        //这几项需要单独计算
        if (in_array($itemCode, array('N', 'O', 'P', 'Q', 'R', 'S'))) {
            $NOPQRSItems[$itemCode] = $val;
            continue;
        }
        // itemCode  长度为1时认为是大项
        if (strlen($itemCode) == 1) {
            if ($isFirstSmallCount) {
                //第一个大项出现时不输出小计
                $isFirstSmallCount = false;
            } else {
                //增加一行小计
                $res[$count++] = array('budgetItemId' => 'NULL' . $count, 'itemName' => $isGBK ? str2GBK('小计') : '小计', 'budgetId' => $budgetId, 'mainMaterialTotalPrice' => $smallCount[0], 'auxiliaryMaterialTotalPrice' => $smallCount[1], 'manpowerTotalPrice' => $smallCount[2], 'machineryTotalPrice' => $smallCount[3], 'manpowerTotalCost' => $smallCount[4], 'mainMaterialTotalCost' => $smallCount[5]);
                $directFee += $smallCount[0];
                $directFee += $smallCount[1];
                $directFee += $smallCount[2];
                $directFee += $smallCount[3];
                $smallCount = array(0, 0, 0, 0, 0, 0);
            }
            //输出大项
            $res[$count++] = array('itemName' => $itemName, 'basicItemId' => $val['basicItemId'], 'itemCode' => $val['itemCode'], 'budgetId' => $val['budgetId'], 'budgetItemId' => $val['budgetItemId'], 'isEditable' => true);
            continue;
        }
        //正常输出项
        $res[$count] = $val;
        $res[$count]['itemName'] = $itemName;
        $res[$count]['itemAmount'] = $itemAmount;
        $res[$count]['itemUnit'] = $itemUnit;
        $res[$count]['mainMaterialPrice'] = $val['mainMaterialPrice'] * $discount / 100;
        $res[$count]['auxiliaryMaterialPrice'] = $val['auxiliaryMaterialPrice'] * $discount / 100;
        $res[$count]['manpowerPrice'] = $val['manpowerPrice'] * $discount / 100;
        $res[$count]['machineryPrice'] = $val['machineryPrice'] * $discount / 100;
        $res[$count]['orgMainMaterialPrice'] = "原价:" . $val['mainMaterialPrice'] . " " . ($discount == 100 ? "" : $discount / 10 . "折");
        $res[$count]['orgAuxiliaryMaterialPrice'] = "原价:" . $val['auxiliaryMaterialPrice'] . " " . ($discount == 100 ? "" : $discount / 10 . "折");
        $res[$count]['orgManpowerPrice'] = "原价:" . $val['manpowerPrice'] . " " . ($discount == 100 ? "" : $discount / 10 . "折");
        $res[$count]['orgMachineryPrice'] = "原价:" . $val['machineryPrice'] . " " . ($discount == 100 ? "" : $discount / 10 . "折");
        //损耗=(主材单价+辅料单价)*0.05,按折扣后的价格
        $loss = ($res[$count]['mainMaterialPrice'] + $res[$count]['auxiliaryMaterialPrice']) * 0.05;
        if ($val['lossPercent'] != $loss) {
            $val['lossPercent'] = $loss;
            editItem($val);
        }
        $res[$count]['lossPercent'] = $loss;
        //主材总价=(主菜单价+损耗)* 数量,按折扣后的价格
        $mainMaterialTotalPrice = $itemAmount * ($res[$count]['mainMaterialPrice'] + $loss);
        $res[$count]['mainMaterialTotalPrice'] = $mainMaterialTotalPrice;
        $res[$count]['auxiliaryMaterialTotalPrice'] = $itemAmount * $res[$count]['auxiliaryMaterialPrice'];
        $res[$count]['manpowerTotalPrice'] = $itemAmount * $res[$count]['manpowerPrice'];
        $res[$count]['machineryTotalPrice'] = $itemAmount * $res[$count]['machineryPrice'];
        $res[$count]['remark'] = $val['remark'] == 'NULL' ? '' : ($isGBK ? str2GBK($val['remark']) : addslashes(nl2br(str_replace("\n", "<br />", $val['remark']))));
        $res[$count]['isEditable'] = true;
        /**
        			2.辅材总价=辅材单价*数量
        			3.人工总价=人工单价*数量
        			4.机械总价=机械单价*数量
        			6.小计=各类小项总价之和
        			7.合计=所有小巷综合			
        			**/
        $smallCount[0] += $res[$count]['mainMaterialTotalPrice'];
        $smallCount[1] += $res[$count]['auxiliaryMaterialTotalPrice'];
        $smallCount[2] += $res[$count]['manpowerTotalPrice'];
        $smallCount[3] += $res[$count]['machineryTotalPrice'];
        $smallCount[4] += $res[$count]['manpowerCost'];
        $smallCount[5] += $res[$count]['mainMaterialCost'];
        foreach ($res[$count] as $key => $val) {
            if ($val === "" || $val === null) {
                //去除空值,减少网络数据量
                unset($res[$count][$key]);
            }
        }
        $count++;
    }
    //如果 isFirstSmallCount 还是初始化的状态true说明没有一行小计,false的时候,说明至少有一个大项输出了。
    if (!$isFirstSmallCount) {
        //最后一行小计
        $res[$count++] = array('budgetItemId' => 'NULL' . $count, 'itemName' => $isGBK ? str2GBK('小计') : '小计', 'budgetId' => $budgetId, 'mainMaterialTotalPrice' => $smallCount[0], 'auxiliaryMaterialTotalPrice' => $smallCount[1], 'manpowerTotalPrice' => $smallCount[2], 'machineryTotalPrice' => $smallCount[3], 'manpowerTotalCost' => $smallCount[4], 'mainMaterialTotalCost' => $smallCount[5], 'isEditable' => false);
        $directFee += $smallCount[0];
        $directFee += $smallCount[1];
        $directFee += $smallCount[2];
        $directFee += $smallCount[3];
        $smallCount = array(0, 0, 0, 0, 0, 0);
    }
    //增加一行空行
    $res[$count++] = array('budgetItemId' => 'NULL' . $count, 'budgetId' => $budgetId, 'isEditable' => false);
    //计算其他项
    $totalFee = $directFee;
    //N 工程直接费
    $itemUnit = '元';
    $itemName = '工程直接费';
    $itemCode = 'N';
    $item = $NOPQRSItems[$itemCode];
    $budgetItemId = $item['budgetItemId'];
    $fee = $directFee;
    $res[$count++] = array('budgetItemId' => $budgetItemId, 'itemName' => $isGBK ? str2GBK($itemName) : $itemName, 'budgetId' => $budgetId, 'itemCode' => $itemCode, 'itemUnit' => $isGBK ? str2GBK($itemUnit) : $itemUnit, 'mainMaterialTotalPrice' => $fee, 'isEditable' => false);
    if ($fee != $item['mainMaterialPrice']) {
        $item['mainMaterialPrice'] = $fee;
        $arr = editItem($item);
        // update
    }
    // O 设计费
    $itemUnit = '元';
    $itemName = '设计费3%';
    $itemCode = 'O';
    $item = $NOPQRSItems[$itemCode];
    $itemAmount = $item['itemAmount'];
    $budgetItemId = $item['budgetItemId'];
    $fee = $directFee * $itemAmount;
    $totalFee += $fee;
    $res[$count++] = array('budgetItemId' => $budgetItemId, 'itemName' => $isGBK ? str2GBK($itemName) : $itemName, 'budgetId' => $budgetId, 'itemCode' => $itemCode, 'itemUnit' => $isGBK ? str2GBK($itemUnit) : $itemUnit, 'itemAmount' => $itemAmount, 'mainMaterialTotalPrice' => $fee, 'isEditable' => false);
    if ($fee != $item['mainMaterialPrice']) {
        $item['mainMaterialPrice'] = $fee;
        $arr = editItem($item);
        // update
    }
    // P 效果图
    $itemUnit = '张';
    $itemName = '效果图';
    $itemCode = 'P';
    $item = $NOPQRSItems[$itemCode];
    $itemAmount = $item['itemAmount'];
    $budgetItemId = $item['budgetItemId'];
    $fee = 500 * $itemAmount;
    $totalFee += $fee;
    $res[$count++] = array('budgetItemId' => $budgetItemId, 'itemName' => $isGBK ? str2GBK($itemName) : $itemName, 'budgetId' => $budgetId, 'itemCode' => $itemCode, 'itemUnit' => $isGBK ? str2GBK($itemUnit) : $itemUnit, 'itemAmount' => $itemAmount, 'mainMaterialTotalPrice' => $fee, 'isEditable' => false);
    // Q 5%管理费
    $itemUnit = '元';
    $itemName = '5%管理费';
    $itemCode = 'Q';
    $item = $NOPQRSItems[$itemCode];
    $itemAmount = $item['itemAmount'];
    $budgetItemId = $item['budgetItemId'];
    $fee = $directFee * $itemAmount;
    $totalFee += $fee;
    $res[$count++] = array('budgetItemId' => $budgetItemId, 'itemName' => $isGBK ? str2GBK($itemName) : $itemName, 'budgetId' => $budgetId, 'itemCode' => $itemCode, 'itemUnit' => $isGBK ? str2GBK($itemUnit) : $itemUnit, 'itemAmount' => $itemAmount, 'mainMaterialTotalPrice' => $fee, 'isEditable' => false);
    if ($fee != $item['mainMaterialPrice']) {
        $item['mainMaterialPrice'] = $fee;
        $arr = editItem($item);
        // update
    }
    // R 税金
    $itemUnit = '元';
    $itemName = '税金';
    $itemCode = 'R';
    $item = $NOPQRSItems[$itemCode];
    $itemAmount = $item['itemAmount'];
    $budgetItemId = $item['budgetItemId'];
    $fee = $directFee * $itemAmount;
    $totalFee += $fee;
    $res[$count++] = array('budgetItemId' => $budgetItemId, 'itemName' => $isGBK ? str2GBK($itemName) : $itemName, 'budgetId' => $budgetId, 'itemCode' => $itemCode, 'itemUnit' => $isGBK ? str2GBK($itemUnit) : $itemUnit, 'itemAmount' => $itemAmount, 'mainMaterialTotalPrice' => $fee, 'isEditable' => false);
    if ($fee != $item['mainMaterialPrice']) {
        $item['mainMaterialPrice'] = $fee;
        $arr = editItem($item);
        // update
    }
    // S 工程总造价
    $itemUnit = '元';
    $itemName = '工程总造价';
    $itemCode = 'S';
    $item = $NOPQRSItems[$itemCode];
    $budgetItemId = $item['budgetItemId'];
    $itemAmount = '';
    $fee = $totalFee;
    $res[$count++] = array('budgetItemId' => $budgetItemId, 'itemName' => $isGBK ? str2GBK($itemName) : $itemName, 'budgetId' => $budgetId, 'itemCode' => $itemCode, 'itemUnit' => $isGBK ? str2GBK($itemUnit) : $itemUnit, 'itemAmount' => $itemAmount, 'mainMaterialTotalPrice' => $fee, 'isEditable' => false);
    if ($fee != $item['mainMaterialPrice']) {
        $item['mainMaterialPrice'] = $fee;
        $arr = editItem($item);
        // update
    }
    foreach ($res as $count => $bItem) {
        //保留小数点后两位,不足补0
        foreach ($bItem as $key => $val) {
            if (!in_array($key, array('itemAmount', 'mainMaterialTotalPrice', 'auxiliaryMaterialTotalPrice', 'manpowerTotalPrice', 'mainMaterialTotalCost', 'lossPercent', 'manpowerTotalCost', 'machineryTotalPrice', 'mainMaterialPrice', 'auxiliaryMaterialPrice', 'machineryPrice', 'manpowerPrice'))) {
                continue;
            }
            $res[$count][$key] = formatNumber($val);
        }
    }
    return $res;
}
예제 #2
0
<?php

include_once './Classes/PHPExcel.php';
include_once './Classes/PHPExcel/Writer/Excel5.php';
include_once "../libs/conn.php";
include_once '../libs/budgetDB.php';
$downLoad = false;
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'download') {
    $downLoad = true;
}
$budget = getBudgetsByBudgetId($_REQUEST["budgetId"]);
$budgetItems = getBudgetItemsByBudgetId($_REQUEST["budgetId"], true, false);
$fileName = str2GBK(urldecode($budget[0]["projectName"])) . ".xls";
$cancel_time = date("YmdHis");
// 创建一个处理对象实例
$objExcel = new PHPExcel();
// 创建文件格式写入对象实例, uncomment
//$objWriter = new PHPExcel_Writer_Excel5($objExcel);
$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
//设置文档基本属性       encode error ,dont konw why
/*$compay = "author";
$objProps = $objExcel->getProperties();       
$objProps->setCreator($compay);  
$objProps->setLastModifiedBy(urldecode($compay));     
$objProps->setTitle($compay);       
$objProps->setTitle(str2GBK(urldecode($budget[0]['projectName'])));       
$objProps->setSubject($compay);       
$objProps->setDescription($compay);       
$objProps->setKeywords($compay));       
$objProps->setCategory($compay)); */
//*************************************
예제 #3
0
//$titleLeft      = array(4,25,54.5,65,236);
$GfontSize = 10;
include_once "../libs/conn.php";
include_once '../libs/budgetDB.php';
include_once 'chinese.php';
include_once 'pdf_chinese.php';
global $custName;
global $projectName;
$budget = getBudgetsByBudgetId($_REQUEST["budgetId"]);
if (count($budget) == 0) {
    throw new Exception("no budget with id " . $_REQUEST["budgetId"]);
}
$custName = str2GBK(urldecode($budget[0]["custName"]));
$projectName = str2GBK(urldecode($budget[0]["businessAddress"] == "" ? $budget[0]["projectName"] : $budget[0]["businessRegion"] . " " . $budget[0]["businessAddress"]));
$budgetName = str2GBK(urldecode($budget[0]["budgetName"]));
$projectComments = str2GBK(urldecode($budget[0]["comments"]));
$action = isset($_REQUEST["action"]) ? $_REQUEST["action"] : "download";
$budgetItems = getBudgetItemsByBudgetId($_REQUEST["budgetId"], true);
$pdf = new PDF('L', 'mm', 'A4');
//创建新的FPDF对象
$pdf->AddGBFont();
//设置中文字体
$pdf->Open();
//开始创建PDF
$pdf->AddPage();
//增加一页
$pdf->SetFont("GB", '', $GfontSize);
//设置字体样式
$pdf->AliasNbPages("__totalPage__");
//echo $custName.":".$projectName;
foreach ($budgetItems as $bItem) {