Пример #1
0
 function execute()
 {
     /*
     	Date selection form
     */
     // fetch existing dates
     $this->date_start = @security_script_input("/^[0-9]*-[0-9]*-[0-9]*\$/", $_GET["date_start_yyyy"] . "-" . $_GET["date_start_mm"] . "-" . $_GET["date_start_dd"]);
     $this->date_end = @security_script_input("/^[0-9]*-[0-9]*-[0-9]*\$/", $_GET["date_end_yyyy"] . "-" . $_GET["date_end_mm"] . "-" . $_GET["date_end_dd"]);
     if (!$this->date_start || $this->date_start == "--") {
         if ($_SESSION["account_reports"]["date_start"]) {
             $this->date_start = $_SESSION["account_reports"]["date_start"];
         } else {
             $this->date_start = NULL;
         }
     }
     if (!$this->date_end || $this->date_end == "--") {
         if ($_SESSION["account_reports"]["date_end"]) {
             $this->date_end = $_SESSION["account_reports"]["date_end"];
         } else {
             $this->date_end = NULL;
         }
     }
     // save to session vars
     $_SESSION["account_reports"]["date_start"] = $this->date_start;
     $_SESSION["account_reports"]["date_end"] = $this->date_end;
     // define form
     $this->obj_form = new form_input();
     $this->obj_form->method = "get";
     $this->obj_form->action = "index.php";
     $this->obj_form->formname = "accounts_report_trialbalance";
     $this->obj_form->language = $_SESSION["user"]["lang"];
     // hidden values
     $structure = NULL;
     $structure["fieldname"] = "page";
     $structure["type"] = "hidden";
     $structure["defaultvalue"] = $_GET["page"];
     $this->obj_form->add_input($structure);
     // date selection
     $structure = NULL;
     $structure["fieldname"] = "date_start";
     $structure["type"] = "date";
     $structure["defaultvalue"] = $this->date_start;
     $this->obj_form->add_input($structure);
     $structure = NULL;
     $structure["fieldname"] = "date_end";
     $structure["type"] = "date";
     $structure["defaultvalue"] = $this->date_end;
     $this->obj_form->add_input($structure);
     // submit
     $structure = NULL;
     $structure["fieldname"] = "submit";
     $structure["type"] = "submit";
     $structure["defaultvalue"] = "Apply Filter Options";
     $this->obj_form->add_input($structure);
     // establish a new table object
     $this->obj_table = new table();
     $this->obj_table->language = $_SESSION["user"]["lang"];
     $this->obj_table->tablename = "accounts_reports_trialbalance";
     // define all the columns and structure
     $this->obj_table->add_column("standard", "code_chart", "account_charts.code_chart");
     $this->obj_table->add_column("standard", "description", "account_charts.description");
     $this->obj_table->add_column("standard", "chart_type", "account_chart_type.value");
     // the debit and credit columns need to be calculated by a seporate query
     $this->obj_table->add_column("price", "debit", "NONE");
     $this->obj_table->add_column("price", "credit", "NONE");
     // defaults
     $this->obj_table->columns = array("code_chart", "description", "chart_type", "debit", "credit");
     $this->obj_table->columns_order = array("code_chart");
     // totals
     $this->obj_table->total_columns = array("debit", "credit");
     $this->obj_table->total_rows = array("debit", "credit");
     $this->obj_table->total_rows_mode = "subtotal_nofinal";
     // this is actually re-calculated based on chart type
     // define SQL structure
     $this->obj_table->sql_obj->prepare_sql_settable("account_charts");
     $this->obj_table->sql_obj->prepare_sql_addfield("id", "account_charts.id");
     $this->obj_table->sql_obj->prepare_sql_addfield("chart_total_mode", "account_chart_type.total_mode");
     $this->obj_table->sql_obj->prepare_sql_addjoin("LEFT JOIN account_chart_type ON account_chart_type.id = account_charts.chart_type");
     $this->obj_table->sql_obj->prepare_sql_addwhere("account_charts.chart_type != '1'");
     // fetch all the chart information
     $this->obj_table->generate_sql();
     $this->obj_table->load_data_sql();
     // fetch debit and credit summaries for all charts in advance - this
     // is better than running a query per chart just to get all the totals
     $sql_amount_obj = new sql_query();
     $sql_amount_obj->prepare_sql_settable("account_trans");
     $sql_amount_obj->prepare_sql_addfield("chartid");
     $sql_amount_obj->prepare_sql_addfield("credit", "SUM(amount_credit)");
     $sql_amount_obj->prepare_sql_addfield("debit", "SUM(amount_debit)");
     if ($this->date_start) {
         $sql_amount_obj->prepare_sql_addwhere("date_trans >= '" . $this->date_start . "'");
     }
     if ($this->date_end) {
         $sql_amount_obj->prepare_sql_addwhere("date_trans <= '" . $this->date_end . "'");
     }
     $sql_amount_obj->prepare_sql_addgroupby("chartid");
     $sql_amount_obj->generate_sql();
     $sql_amount_obj->execute();
     if ($sql_amount_obj->num_rows()) {
         $sql_amount_obj->fetch_array();
         // run through all the chart rows and fill in the credit/debit fields
         for ($i = 0; $i < count(array_keys($this->obj_table->data)); $i++) {
             foreach ($sql_amount_obj->data as $data_amount) {
                 if ($data_amount["chartid"] == $this->obj_table->data[$i]["id"]) {
                     $this->obj_table->data[$i]["debit"] = $data_amount["debit"];
                     $this->obj_table->data[$i]["credit"] = $data_amount["credit"];
                 }
             }
         }
     }
     // process table data
     $this->obj_table->render_table_prepare();
     // correctly generate the total column
     for ($i = 0; $i < count(array_keys($this->obj_table->data)); $i++) {
         if (!empty($this->obj_table->data[$i]["debit"]) && !empty($this->obj_table->data[$i]["debit"])) {
             if ($this->obj_table->data[$i]["chart_total_mode"] == "credit") {
                 $this->obj_table->data[$i]["total"] = $this->obj_table->data[$i]["credit"] - $this->obj_table->data[$i]["debit"];
             } else {
                 $this->obj_table->data[$i]["total"] = $this->obj_table->data[$i]["debit"] - $this->obj_table->data[$i]["credit"];
             }
             $this->obj_table->data_render[$i]["total"] = format_money($this->obj_table->data[$i]["total"]);
         }
     }
     $this->obj_table->data["total"]["total"] = $this->obj_table->data["total"]["debit"] - $this->obj_table->data["total"]["credit"];
     $this->obj_table->data_render["total"]["total"] = format_money($this->obj_table->data["total"]["total"]);
 }