function print_check()
{
    global $path_to_root, $systypes_array, $print_invoice_no;
    // Get the payment
    $from = $_POST['PARAM_0'];
    $destination = $_POST['PARAM_1'];
    $trans_no = explode("-", $from);
    $dec = user_price_dec();
    if ($destination) {
        include_once $path_to_root . "/reporting/includes/excel_report.inc";
    } else {
        include_once $path_to_root . "/reporting/includes/pdf_report.inc";
    }
    $from_trans = get_remittance($trans_no[1], $trans_no[0]);
    // Get check information
    $total_amt = $from_trans['Total'];
    $date = sql2date($from_trans['tran_date']);
    $memo = get_comments_string($trans_no[1], $trans_no[0]);
    // Begin the report
    $rep = new FrontReport(_('Printable Check'), "PrintableCheck", user_pagesize());
    $rep->SetHeaderType(null);
    $rep->NewPage();
    // Set the font
    $rep->Font('', 'courier');
    $rep->fontSize = 12;
    //////////////////
    // Check portion
    $rep->NewLine(1, 0, 76);
    $rep->cols = array(63, 340, 470, 565);
    $rep->aligns = array('left', 'left', 'right', 'right');
    // Pay to
    $rep->TextCol(0, 1, $from_trans['supp_name']);
    // Date
    $rep->DateCol(1, 2, $rep->DatePrettyPrint($date, 0, 0));
    // Amount (numeric)
    $rep->TextCol(2, 3, '***' . number_format2(-$total_amt, $dec));
    // Amount (words)
    $rep->NewLine(1, 0, 23);
    $rep->TextCol(0, 2, $from_trans['curr_code'] . ": " . price_in_words(-$total_amt, ST_CHEQUE));
    // Memo
    $rep->NewLine(1, 0, 78);
    $rep->TextCol(0, 1, $memo);
    $rep->company = get_company_prefs();
    /////////////////////
    // Item details x 2
    for ($section = 1; $section <= 2; $section++) {
        $rep->fontSize = 12;
        // Move down to the correct section
        $rep->row = $section == 1 ? 505 : 255;
        $rep->cols = array(20, 340, 470, 588);
        $rep->aligns = array('left', 'left', 'right', 'right');
        // Pay to
        $rep->Font('b');
        $rep->TextCol(0, 1, $from_trans['supp_name']);
        $rep->Font();
        // Date
        $rep->DateCol(1, 2, $rep->DatePrettyPrint($date, 0, 0));
        // Amount (numeric)
        $rep->TextCol(2, 3, number_format2(-$total_amt, 2));
        // Add Trans # + Reference
        $rep->NewLine();
        if ($print_invoice_no == 0) {
            $tno = $from_trans['reference'];
        } else {
            $tno = $from_trans['trans_no'];
        }
        $rep->TextCol(0, 3, sprintf(_("Payment # %s - from Customer: %s - %s"), $tno, $from_trans['supp_account_no'], $rep->company['coy_name']));
        // Add memo
        $rep->NewLine();
        $rep->TextCol(0, 3, _("Memo: ") . $memo);
        // TODO: Do we want to set a limit on # of item details?  (Max is probably 6-7)
        // Get item details
        $result = get_allocations_for_remittance($from_trans['supplier_id'], $from_trans['type'], $from_trans['trans_no']);
        // Fill in details
        $rep->NewLine(2);
        $rep->fontSize = 10;
        // Use different columns now for the additional info
        $rep->cols = array(20, 160, 235, 290, 370, 480, 588);
        $rep->aligns = array('left', 'left', 'left', 'right', 'right', 'right');
        // Add headers
        $rep->Font('b');
        $rep->TextCol(0, 1, _("Type/Id"));
        $rep->TextCol(1, 2, _("Trans Date"));
        $rep->TextCol(2, 3, _("Due Date"));
        $rep->TextCol(3, 4, _("Total Amount"));
        $rep->TextCol(4, 5, _("Left to Allocate"));
        $rep->TextCol(5, 6, _("This Allocation"));
        $rep->NewLine();
        $rep->Font();
        $total_allocated = 0;
        while ($item = db_fetch($result)) {
            $rep->TextCol(0, 1, $systypes_array[$item['type']] . " " . $item['supp_reference']);
            $rep->TextCol(1, 2, sql2date($item['tran_date']));
            $rep->TextCol(2, 3, sql2date($item['due_date']));
            $rep->AmountCol(3, 4, $item['Total'], $dec);
            $rep->AmountCol(4, 5, $item['Total'] - $item['alloc'], $dec);
            $rep->AmountCol(5, 6, $item['amt'], $dec);
            $total_allocated += $item['amt'];
            $rep->NewLine(1, 0, $rep->lineHeight + 3);
            // Space it out
        }
        $rep->NewLine();
        $rep->TextCol(4, 5, _("Total Allocated"));
        $rep->AmountCol(5, 6, $total_allocated, $dec);
        $rep->NewLine();
        $rep->TextCol(4, 5, _("Left to Allocate"));
        $rep->AmountCol(5, 6, -$from_trans['Total'] - $total_allocated, $dec);
    }
    // end of section
    $rep->End();
}
function print_annual_balance_breakdown_detail()
{
    global $path_to_root, $date_system;
    $dim = get_company_pref('use_dimension');
    $dimension = $dimension2 = 0;
    if ($dim == 2) {
        $date = $_POST['PARAM_0'];
        $dimension = $_POST['PARAM_1'];
        $dimension2 = $_POST['PARAM_2'];
        $comments = $_POST['PARAM_3'];
        $destination = $_POST['PARAM_4'];
    } else {
        if ($dim == 1) {
            $date = $_POST['PARAM_0'];
            $dimension = $_POST['PARAM_1'];
            $comments = $_POST['PARAM_3'];
            $destination = $_POST['PARAM_4'];
        } else {
            $date = $_POST['PARAM_0'];
            $comments = $_POST['PARAM_3'];
            $destination = $_POST['PARAM_4'];
        }
    }
    if ($destination) {
        include_once $path_to_root . "/reporting/includes/excel_report.inc";
    } else {
        include_once $path_to_root . "/reporting/includes/pdf_report.inc";
    }
    $title = _("Annual Balance Breakdown - Detailed");
    $output_filename = "AnnualBalanceBreakDownDetail";
    $fontsize = 7;
    $page_size = user_pagesize();
    $page_orientation = 'L';
    $margins = array('top' => 30, 'bottom' => 34, 'left' => 16, 'right' => 10);
    $excelColWidthFactor = 5;
    $rep = new FrontReport($title, $output_filename, $page_size, $fontsize, $page_orientation, $margins, $excelColWidthFactor);
    $enddate = end_month($date);
    $dec = user_price_dec();
    // Lay out the columns for this report
    //$cols2 = array(0, 70, 127, 184, 232, 280, 328, 376, 424, 472, 520, 568, 616, 664, 712, 760);
    //-------------0--1---2----3----4----5----6----7----8----9----10---11---12---13---14---15-
    $cols2 = array(0 => 0, 70);
    $endline = $rep->endLine - 20;
    $wi = ($endline - $cols2[1]) / 12;
    // 12 amount columns
    for ($i = 2; $i < 15; $i++) {
        $cols2[$i] = $cols2[$i - 1] + $wi;
    }
    $cols = $cols2;
    //----------------------------------------------------------------------------------------
    $aligns2 = array('left', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right');
    $headers2 = array();
    //$cols = array(0, 70, 127, 184, 232, 280, 328, 376, 424, 472, 520, 568, 616, 664, 712, 760);
    //-------------0--1---2----3----4----5----6----7----8----9----10---11---12---13---14---15-
    //----------------------------------------------------------------------------------------
    $aligns = array('left', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right');
    $headers = array();
    $date = begin_month($date);
    $date = add_months($date, -11);
    list($da, $mo, $yr) = explode_date_to_dmy($date);
    if ($date_system == 1) {
        list($yr, $mo, $da) = jalali_to_gregorian($yr, $mo, $da);
    } elseif ($date_system == 2) {
        list($yr, $mo, $da) = islamic_to_gregorian($yr, $mo, $da);
    }
    $headers2[0] = 'Account';
    $headers[0] = '';
    for ($i = 0; $i < 12; $i++) {
        $header_row[$i] = $rep->DatePrettyPrint($date, 0, 1);
        // Wrap at space between month & year
        $wrap_point = strpos($header_row[$i], ' ');
        if ($wrap_point) {
            $headers2[] = substr($header_row[$i], 0, $wrap_point);
            $headers[] = substr($header_row[$i], $wrap_point + 1);
        } else {
            $headers2[] = '';
            $headers[] = $header_row[$i];
        }
        $date = add_months($date, 1);
    }
    /*
    $header_row[] = "Fiscal Year Begin";
    $header_row[] = "Fiscal YTD";
    for ($i = 12; $i < 14; $i++)
    {
       	$wrapped_header_text = $rep->TextWrapCalc($header_row[$i], $cols[$i+2] - $cols[$i+1], true);
       	$headers2[] = trim($wrapped_header_text[0]);
       	$headers[] = trim($wrapped_header_text[1]);
    }
    */
    if ($dim == 2) {
        $params = array(0 => $comments, 1 => array('text' => _("Report Period"), 'from' => '', 'to' => $rep->DatePrettyPrint($enddate)), 2 => array('text' => '', 'from' => '', 'to' => ''), 3 => array('text' => '', 'from' => '', 'to' => ''), 4 => array('text' => _("Dimension 1"), 'from' => get_dimension_string($dimension), 'to' => ''), 5 => array('text' => _("Dimension 2"), 'from' => get_dimension_string($dimension2), 'to' => ''));
    } else {
        if ($dim == 1) {
            $params = array(0 => $comments, 1 => array('text' => _("Report Period"), 'from' => '', 'to' => $rep->DatePrettyPrint($enddate)), 2 => array('text' => '', 'from' => '', 'to' => ''), 3 => array('text' => _('Dimension'), 'from' => get_dimension_string($dimension), 'to' => ''));
        } else {
            $params = array(0 => $comments, 1 => array('text' => _("Report Period"), 'from' => '', 'to' => $rep->DatePrettyPrint($enddate)));
        }
    }
    // Company logo setting
    $companylogoenable = true;
    // Footer Settings
    $footerenable = true;
    $footertext = _('For Management Purposes Only');
    $rep->Font();
    $rep->SetFillColor(240, 240, 240);
    $rep->scaleLogoWidth = true;
    $rep->lineHeight = 8;
    $rep->SetCellPadding(4);
    $rep->Info($params, $cols, $headers, $aligns, $cols2, $headers2, $aligns2, $companylogoenable, $footerenable, $footertext);
    $rep->SetHeaderType('Header3');
    $rep->NewPage();
    $rep->SetDrawColor(0, 0, 0);
    $rep->SetLineWidth(0.1);
    $sales = array(1 => 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    $classresult = get_account_classes(false, 1);
    while ($class = db_fetch($classresult)) {
        $ctotal = array(1 => 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        $convert = get_class_type_convert($class["ctype"]);
        //Print Class Name
        $rep->NewLine();
        $oldcMargin = $rep->GetCellPadding();
        $rep->SetCellPadding(0);
        $oldFontSize = $rep->fontSize;
        $rep->fontSize = 12;
        $rep->Font('b');
        $rep->TextCol(0, 5, $class["class_name"]);
        $rep->Font();
        $rep->fontSize = $oldFontSize;
        $rep->SetCellPadding($oldcMargin);
        $rep->NewLine();
        //Get Account groups/types under this group/type with no parents
        $typeresult = get_account_types(false, $class['cid'], -1);
        while ($accounttype = db_fetch($typeresult)) {
            $classtotal = display_type($accounttype["id"], $accounttype["name"], $yr, $mo, $convert, $dec, $rep, $dimension, $dimension2);
            for ($i = 1; $i <= 12; $i++) {
                $ctotal[$i] += $classtotal[$i];
            }
        }
        //Print Class Summary
        $rep->row += 5;
        $rep->Line($rep->row - 3);
        $rep->NewLine();
        $rep->Font('b');
        $oldcMargin = $rep->GetCellPadding();
        $rep->SetCellPadding(0);
        $fill = 0;
        $rep->TextCol(0, 1, _('Total') . " " . $class["class_name"], 0, 4, 0, $fill, NULL, 1);
        $rep->SetCellPadding($oldcMargin);
        for ($i = 1; $i <= 12; $i++) {
            $rep->AmountCol2($i, $i + 1, $ctotal[$i] * $convert, $dec, 0, 4, 0, $fill, NULL, 1, true);
            $sales[$i] += $ctotal[$i];
        }
        $rep->Font();
        $rep->NewLine(2);
    }
    $rep->Font('bold');
    $oldcMargin = $rep->GetCellPadding();
    $rep->SetCellPadding(0);
    $rep->TextCol(0, 1, _('Net Assets (Liabilities)'), 0, 4, 0, $fill, NULL, 1);
    $rep->SetCellPadding($oldcMargin);
    for ($i = 1; $i <= 12; $i++) {
        $rep->AmountCol2($i, $i + 1, $sales[$i] * -1, $dec, 0, 4, 0, $fill, NULL, 1, true);
    }
    $rep->Font();
    $rep->NewLine();
    $rep->Line($rep->row);
    $rep->NewLine(2);
    $calc = array(1 => 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    $total = array(1 => 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    $classresult = get_account_classes(false, 0);
    while ($class = db_fetch($classresult)) {
        $convert = get_class_type_convert($class["ctype"]);
        //Print Class Name
        $oldcMargin = $rep->GetCellPadding();
        $rep->SetCellPadding(0);
        $rep->Font('b');
        $rep->TextCol(0, 1, _("Total ") . $class["class_name"], 0, 4, 0, $fill, NULL, 1);
        $rep->SetCellPadding($oldcMargin);
        $typeresult = get_account_types(false, $class['cid']);
        while ($accounttype = db_fetch($typeresult)) {
            $result = get_gl_accounts(null, null, $accounttype['id']);
            while ($account = db_fetch($result)) {
                $bal = getPeriods($yr, $mo, $account["account_code"], $dimension, $dimension2);
                $balance = array(1 => $bal['per01'], $bal['per02'], $bal['per03'], $bal['per04'], $bal['per05'], $bal['per06'], $bal['per07'], $bal['per08'], $bal['per09'], $bal['per10'], $bal['per11'], $bal['per12']);
                for ($i = 1; $i <= 12; $i++) {
                    $total[$i] += $balance[$i];
                }
            }
        }
        for ($i = 1; $i <= 12; $i++) {
            $rep->AmountCol2($i, $i + 1, $total[$i] * $convert, $dec, 0, 4, 0, $fill, NULL, 1, true);
            $calc[$i] += $total[$i];
            $total[$i] = 0;
        }
        $rep->NewLine(2);
    }
    $oldcMargin = $rep->GetCellPadding();
    $rep->SetCellPadding(0);
    $rep->TextCol(0, 1, _('Total Profit/Loss'), 0, 4, 0, $fill, NULL, 1);
    $rep->SetCellPadding($oldcMargin);
    for ($i = 1; $i <= 12; $i++) {
        $rep->AmountCol2($i, $i + 1, -$calc[$i], $dec, 0, 4, 0, $fill, NULL, 1, true);
        // no convert
    }
    $rep->Font();
    $rep->End();
}
function print_cash_flow_statement()
{
    global $path_to_root, $date_system, $comp_path;
    $dim = get_company_pref('use_dimension');
    $dimension = $dimension2 = 0;
    if ($dim == 2) {
        $date = $_POST['PARAM_0'];
        $dimension = $_POST['PARAM_1'];
        $dimension2 = $_POST['PARAM_2'];
        $comments = $_POST['PARAM_3'];
        $destination = $_POST['PARAM_4'];
    } else {
        if ($dim == 1) {
            $date = $_POST['PARAM_0'];
            $dimension = $_POST['PARAM_1'];
            $comments = $_POST['PARAM_2'];
            $destination = $_POST['PARAM_3'];
        } else {
            $date = $_POST['PARAM_0'];
            $comments = $_POST['PARAM_1'];
            $destination = $_POST['PARAM_2'];
        }
    }
    if ($destination) {
        include_once $path_to_root . "/reporting/includes/excel_report.inc";
    } else {
        include_once $path_to_root . "/reporting/includes/pdf_report.inc";
    }
    if ($comments) {
        $comments .= ". - ";
    }
    $comments .= _("Balances in Home Currency");
    $title = _("Cash Flow Statement");
    $output_filename = "CashFlowStatement";
    $fontsize = 7;
    $page_size = user_pagesize();
    $page_orientation = 'L';
    $margins = array('top' => 30, 'bottom' => 34, 'left' => 16, 'right' => 10);
    $excelColWidthFactor = 5;
    $rep = new FrontReport($title, $output_filename, $page_size, $fontsize, $page_orientation, $margins, $excelColWidthFactor);
    $enddate = end_month($date);
    $dec = user_price_dec();
    // Lay out the columns for this report
    //$cols2 = array(0, 70, 127, 184, 232, 280, 328, 376, 424, 472, 520, 568, 616, 664, 712, 760);
    //-------------0--1---2----3----4----5----6----7----8----9----10---11---12---13---14---15-
    $cols2 = array(0 => 0, 70);
    $endline = $rep->endLine - 20;
    $wi = ($endline - $cols2[1]) / 14;
    // 14 amount columns
    for ($i = 2; $i < 17; $i++) {
        $cols2[$i] = $cols2[$i - 1] + $wi;
    }
    $cols = $cols2;
    //----------------------------------------------------------------------------------------
    $aligns2 = array('left', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right');
    $headers2 = array();
    //$cols = array(0, 70, 127, 184, 232, 280, 328, 376, 424, 472, 520, 568, 616, 664, 712, 760);
    //-------------0--1---2----3----4----5----6----7----8----9----10---11---12---13---14---15-
    //----------------------------------------------------------------------------------------
    $aligns = array('left', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right', 'right');
    $headers = array();
    $date = begin_month($date);
    $date = add_months($date, -11);
    list($da, $mo, $yr) = explode_date_to_dmy($date);
    if ($date_system == 1) {
        list($yr, $mo, $da) = jalali_to_gregorian($yr, $mo, $da);
    } elseif ($date_system == 2) {
        list($yr, $mo, $da) = islamic_to_gregorian($yr, $mo, $da);
    }
    $headers2[0] = 'Account';
    $headers[0] = '';
    for ($i = 0; $i < 12; $i++) {
        $header_row[$i] = $rep->DatePrettyPrint($date, 0, 1);
        // Wrap at space between month & year
        $wrap_point = strpos($header_row[$i], ' ');
        if ($wrap_point) {
            $headers2[] = substr($header_row[$i], 0, $wrap_point);
            $headers[] = substr($header_row[$i], $wrap_point + 1);
        } else {
            $headers2[] = '';
            $headers[] = $header_row[$i];
        }
        $date = add_months($date, 1);
    }
    $header_row[] = _("Fiscal YTD");
    $header_row[] = _("12 Mo. to Date");
    for ($i = 12; $i < 14; $i++) {
        $wrapped_header_text = $rep->TextWrapCalc($header_row[$i], $cols[$i + 2] - $cols[$i + 1], true);
        $headers2[] = trim($wrapped_header_text[0]);
        $headers[] = trim($wrapped_header_text[1]);
    }
    if ($dim == 2) {
        $params = array(0 => $comments, 1 => array('text' => _("Report Period"), 'from' => '', 'to' => $rep->DatePrettyPrint($enddate)), 2 => array('text' => '', 'from' => '', 'to' => ''), 3 => array('text' => '', 'from' => '', 'to' => ''), 4 => array('text' => _("Dimension 1"), 'from' => get_dimension_string($dimension), 'to' => ''), 5 => array('text' => _("Dimension 2"), 'from' => get_dimension_string($dimension2), 'to' => ''));
    } else {
        if ($dim == 1) {
            $params = array(0 => $comments, 1 => array('text' => _("Report Period"), 'from' => '', 'to' => $rep->DatePrettyPrint($enddate)), 2 => array('text' => '', 'from' => '', 'to' => ''), 3 => array('text' => _('Dimension'), 'from' => get_dimension_string($dimension), 'to' => ''));
        } else {
            $params = array(0 => $comments, 1 => array('text' => _("Report Period"), 'from' => '', 'to' => $rep->DatePrettyPrint($enddate)));
        }
    }
    // Company logo setting
    $companylogoenable = true;
    // Footer Settings
    $footerenable = true;
    $footertext = _('For Management Purposes Only');
    $rep->Font();
    $rep->SetFillColor(240, 240, 240);
    $rep->scaleLogoWidth = true;
    $rep->lineHeight = 8;
    $rep->SetCellPadding(4);
    $rep->Info($params, $cols, $headers, $aligns, $cols2, $headers2, $aligns2, $companylogoenable, $footerenable, $footertext);
    $rep->SetHeaderType('Header3');
    $rep->NewPage();
    $rep->SetDrawColor(0, 0, 0);
    $rep->SetLineWidth(0.1);
    $rep->row += 8;
    display_bank_trans($yr, $mo, $dec, $rep, $dimension, $dimension2, $enddate);
    $rep->Font();
    $rep->End();
}