Helpers for js confirmation dialog before data entry is abandoned.
[fa-stable.git] / includes / ui / ui_lists.inc
index ab9a96592452cc0dac5442927f100fb0781901a4..5fbdb8d4436e12ed0a45ce31fc191fa1e8938c5f 100644 (file)
@@ -46,9 +46,10 @@ $opts = array(               // default options
        'sel_hint' => null,
        'search_box' => false,  // name or true/false
        'type' => 0,    // type of extended selector:
-               // 0 - with (optional) visible search box, search by id
+               // 0 - with (optional) visible search box, search by fragment inside id
                // 1 - with hidden search box, search by option text
-               // 2 - TODO reverse: box with hidden selector available via enter; this
+               // 2 - with (optional) visible search box, search by fragment at the start of id
+               // 3 - TODO reverse: box with hidden selector available via enter; this
                // would be convenient for optional ad hoc adding of new item
        'search_submit' => true, //search submit button: true/false
        'size' => 8,    // size and max of box tag
@@ -77,8 +78,17 @@ $opts = array(               // default options
        $select_submit =  $opts['select_submit'];
        $spec_id = $opts['spec_id'];
        $spec_option = $opts['spec_option'];
-       $by_id = ($opts['type'] == 0);
-       $class = $by_id ? 'combo':'combo2';
+       if ($opts['type'] == 0) {
+               $by_id = true;
+               $class = 'combo';
+       } elseif($opts['type'] == 1) {
+               $by_id = false;
+               $class = 'combo2';
+       } else {
+               $by_id = true;
+               $class = 'combo3';
+       }
+
        $disabled = $opts['disabled'] ? "disabled" : '';
        $multi = $opts['multi'];
        
@@ -89,21 +99,20 @@ $opts = array(              // default options
                $opts['sel_hint'] = $by_id || $search_box==false ?
                        '' : _('Press Space tab for search pattern entry');
 
-       if ($opts['box_hint'] === null)  // dodaƦ hint dla pustego ****
+       if ($opts['box_hint'] === null)
                $opts['box_hint'] = $search_box && $search_submit != false ?
                        ($by_id ? _('Enter code fragment to search or * for all')
                        : _('Enter description fragment to search or * for all')) :'';
 
        if ($selected_id == null) {
-               $selected_id = get_post($name, $opts['default']);
+               $selected_id = get_post($name, (string)$opts['default']);
        }
        if(!is_array($selected_id))
-               $selected_id = array($selected_id); // code is generalized for multiple selection support
+               $selected_id = array((string)$selected_id); // code is generalized for multiple selection support
 
        $txt = get_post($search_box);
        $rel = '';
        $limit = '';
-
        if (isset($_POST['_'.$name.'_update'])) { // select list or search box change
                if ($by_id) $txt = $_POST[$name];
 
@@ -134,17 +143,19 @@ $opts = array(            // default options
                                if ($spec_option === false && $selected_id == array())
                                        $limit = ' LIMIT 1';
                                else
-                                       $opts['where'][] = $valfield . "='". get_post($name, $spec_id)."'";
+                                       $opts['where'][] = $valfield . "=". db_escape(get_post($name, $spec_id));
                        }
                        else
                                if ($txt != '*') {
 
                                        foreach($opts['search'] as $i=> $s)
-                                               $opts['search'][$i] = $s . " LIKE '%{$txt}%'";
+                                               $opts['search'][$i] = $s . " LIKE "
+                                                       .db_escape(($class=='combo3' ? '' : '%').$txt.'%');
                                        $opts['where'][] = '('. implode($opts['search'], ' OR ') . ')';
                                }
                }
        }
+
        // sql completion
        if (count($opts['where'])) {
                $where = strpos($sql, 'WHERE')==false ? ' WHERE ':' AND ';
@@ -328,7 +339,7 @@ $opts = array(              // default options
                $selected_id = get_post($name, $opts['default']);
        }
        if(!is_array($selected_id))
-               $selected_id = array($selected_id); // code is generalized for multiple selection support
+               $selected_id = array((string)$selected_id); // code is generalized for multiple selection support
 
        if (isset($_POST[ '_'.$name.'_update'])) {
                if (!$opts['async'])
@@ -344,17 +355,15 @@ $opts = array(            // default options
 //if($name=='SelectStockFromList') display_error($sql);
                foreach($items as $value=>$descr) {
                        $sel = '';
-                       if (in_array((string)$value, $selected_id), true) {
-                               $sel = "selected='selected'";
+                       if (in_array((string)$value, $selected_id, true)) {
+                               $sel = 'selected';
                                $found = $value;
                        }
                        if ($first_id === false) {
                                $first_id = $value;
-                               $first_opt = "<option %s value='$value'>$descr</option>\n";
-                       } 
-                       else {
-                               $selector .= "<option $sel value='$value'>$descr</option>\n";
+                               $first_opt = $descr;
                        }
+                       $selector .= "<option $sel value='$value'>$descr</option>\n";
                }
 
        if ($first_id!==false) {
@@ -365,7 +374,7 @@ $opts = array(              // default options
        if ($spec_option !== false) { // if special option used - add it
                $first_id = $spec_id;
                $first_opt = $spec_option;
-               $sel = $found===false ? "selected='selected'" : '';
+               $sel = $found===false ? 'selected' : '';
                $selector = "<option $sel value='$spec_id'>$spec_option</option>\n"
                        . $selector;
        }
@@ -374,6 +383,7 @@ $opts = array(              // default options
                $selected_id = array($first_id);
        }
        $_POST[$name] = $multi ? $selected_id : $selected_id[0];
+
        $selector = "<select autocomplete='off' ".($multi  ? "multiple" : '')
                . ($opts['height']!==false ? ' size="'.$opts['height'].'"' : '')
                . "$disabled name='$name".($multi ? '[]' : '')."' class='combo' title='"
@@ -512,7 +522,7 @@ function customer_branches_list($customer_id, $name, $selected_id=null,
        global $all_items;
 
        $sql = "SELECT branch_code, branch_ref FROM ".TB_PREF."cust_branch
-               WHERE debtor_no='" . $customer_id . "' ";
+               WHERE debtor_no=" . db_escape($customer_id)." ";
 
        if ($editkey)
                set_editor('branch', $name, $editkey);
@@ -1440,17 +1450,14 @@ function pos_list_row($label, $name, $selected_id=null, $spec_option=false, $sub
 //-----------------------------------------------------------------------------------------------
 // Payment type selector for current user.
 //
-function sale_payment_list($name, $selected_id=null, $submit_on_change=true)
+function sale_payment_list($name, $category, $selected_id=null, $submit_on_change=true)
 {
        $sql = "SELECT terms_indicator, terms, inactive FROM ".TB_PREF."payment_terms";
-       $paym = get_sales_point(user_pos());
-
-       if (!$paym['cash_sale'] || !$paym['credit_sale']) {
-               if ($paym['cash_sale']) // only cash
+       
+       if ($category == PM_CASH) // only cash
                        $sql .= " WHERE days_before_due=0 AND day_in_following_month=0";
-               else
+       if ($category == PM_CREDIT) // only delayed payments
                        $sql .= " WHERE days_before_due!=0 OR day_in_following_month!=0";
-       }
 
        return combo_input($name, $selected_id, $sql, 'terms_indicator', 'terms',
        array(
@@ -1460,13 +1467,13 @@ function sale_payment_list($name, $selected_id=null, $submit_on_change=true)
 
 }
 
-function sale_payment_list_cells($label, $name, $selected_id=null, $submit_on_change=true)
+function sale_payment_list_cells($label, $name, $category, $selected_id=null, $submit_on_change=true)
 {
        if ($label != null)
                echo "<td class='label'>$label</td>\n";
        echo "<td>";
 
-       echo sale_payment_list($name, $selected_id, $submit_on_change);
+       echo sale_payment_list($name, $category, $selected_id, $submit_on_change);
 
        echo "</td>\n";
 }
@@ -1539,7 +1546,8 @@ function gl_account_types_list($name, $selected_id=null, $all_option=false, $all
 
        return combo_input($name, $selected_id, $sql, 'id', 'name',
        array(
-               'order' => 'class_id', 'id',
+               'format' => '_format_account',
+               'order' => array('class_id', 'id', 'parent'),
                'spec_option' =>$all_option,
                'spec_id' => $all_items
        ) );
@@ -1583,6 +1591,7 @@ function gl_all_accounts_list($name, $selected_id=null, $skip_bank_accounts=fals
                'format' => '_format_account',
                'spec_option' => $all_option===true ?  _("Use Item Sales Accounts") : $all_option,
                'spec_id' => '',
+               'type' => 2,
                'order' => array('type.class_id','type.id','account_code'),
                'search_box' => $cells,
                        'search_submit' => false,
@@ -1653,30 +1662,31 @@ function yesno_list_row($label, $name, $selected_id=null, $name_yes="", $name_no
 
 //------------------------------------------------------------------------------------------------
 
-function languages_list($name, $selected_id=null)
+function languages_list($name, $selected_id=null, $all_option=false)
 {
        global $installed_languages;
 
        $items = array();
+       if ($all_option)
+               $items[''] = $all_option;
        foreach ($installed_languages as $lang)
                        $items[$lang['code']] = $lang['name'];
-       
        return array_selector($name, $selected_id, $items);
 }
 
-function languages_list_cells($label, $name, $selected_id=null)
+function languages_list_cells($label, $name, $selected_id=null, $all_option=false)
 {
        if ($label != null)
                echo "<td>$label</td>\n";
        echo "<td>";
-       echo languages_list($name, $selected_id);
+       echo languages_list($name, $selected_id, $all_option);
        echo "</td>\n";
 }
 
-function languages_list_row($label, $name, $selected_id=null)
+function languages_list_row($label, $name, $selected_id=null, $all_option=false)
 {
        echo "<tr><td class='label'>$label</td>";
-       languages_list_cells(null, $name, $selected_id);
+       languages_list_cells(null, $name, $selected_id, $all_option);
        echo "</tr>\n";
 }
 
@@ -1851,7 +1861,7 @@ function systypes_list_cells($label, $name, $value=null, $submit_on_change=false
 function systypes_list_row($label, $name, $value=null, $submit_on_change=false)
 {
        echo "<tr><td class='label'>$label</td>";
-       systypes_list_cells(null, $name, $value, false, $submit_on_change);
+       systypes_list_cells(null, $name, $value, $submit_on_change);
        echo "</tr>\n";
 }
 
@@ -1917,6 +1927,25 @@ function supp_allocations_list_cell($name, $selected=null)
        echo "</td>\n";
 }
 
+function supp_transactions_list_cell($name, $selected=null)
+{
+       global $all_items;
+
+       echo "<td>\n";
+       $allocs = array( 
+               $all_items=>_("All Types"),
+               '6'=>_("GRNs"),
+               '1'=> _("Invoices"),
+               '2'=> _("Overdue Invoices"),
+               '3' => _("Payments"),
+               '4' => _("Credit Notes"),
+               '5' => _("Overdue Credit Notes")
+       );
+
+       echo array_selector($name, $selected, $allocs);
+       echo "</td>\n";
+}
+
 function policy_list_cells($label, $name, $selected=null)
 {
        if ($label != null)
@@ -2218,4 +2247,82 @@ function extset_list($name, $value=null, $submit_on_change=false)
                ));
 }
 
+function crm_category_types_list($name, $selected_id=null, $filter=array(), $submit_on_change=true)
+{
+
+       $sql = "SELECT id, name, type, inactive FROM ".TB_PREF."crm_categories";
+
+       $multi = false;
+       $groups = false;
+       $where = array();
+       if (@$filter['class']) {
+               $where[] = 'type='.db_escape($filter['class']);
+       } else
+               $groups = 'type';
+       if (@$filter['subclass']) $where[] = 'action='.db_escape($filter['subclass']);
+       if (@$filter['entity']) $where[] = 'entity_id='.db_escape($filter['entity']);
+       if (@$filter['multi']) { // contact category selector for person
+               $multi = true;
+       }
+
+       return combo_input($name, $selected_id, $sql, 'id', 'name',
+               array(
+                       'multi' => $multi,
+                       'height' => $multi ? 5:1,
+                       'category' => $groups,
+                       'select_submit'=> $submit_on_change,
+                       'async' => true,
+                       'where' => $where
+               ));
+}
+
+function crm_category_types_list_row($label, $name, $selected_id=null, $filter=array(), $submit_on_change=true)
+{
+       echo "<tr><td class='label'>$label</td><td>";
+       echo crm_category_types_list($name, $selected_id, $filter, $submit_on_change);
+       echo "</td></tr>\n";
+}
+
+function payment_type_list_row($label, $name, $selected_id=null, $submit_on_change=false)
+{
+       global $pterm_types;
+       
+       echo "<tr><td class='label'>$label</td><td>";
+       echo array_selector($name, $selected_id, $pterm_types, 
+               array( 
+                       'select_submit'=> $submit_on_change
+               ) );
+       echo "</td></tr>\n";
+}
+
+function coa_list_row($label, $name, $value=null)
+{
+       global $path_to_root, $installed_extensions;
+
+       $path = $path_to_root.'/sql/';
+       $coas = array();
+       $sqldir = opendir($path);
+       while (false !== ($fname = readdir($sqldir)))
+       {
+               if (is_file($path.$fname) && substr($fname,-4)=='.sql' && @($fname[2] == '_'))
+               {
+                       $ext = array_search_value($fname, $installed_extensions, 'sql');
+                       if ($ext!=null) {
+                               $descr = $ext['name'];
+                       } elseif ($fname == 'en_US-new.sql') { // two standard COAs
+                               $descr = _("Standard new company American COA (4 digit)");
+                       } elseif ($fname == 'en_US-demo.sql') {
+                               $descr = _("Standard American COA (4 digit) with demo data");
+                       } else
+                               $descr = $fname;
+
+                       $coas[$fname] =  $descr;
+               }
+       }
+       ksort($coas);
+
+       echo "<tr><td class='label'>$label</td>\n<td>";
+       echo array_selector( $name, $value, $coas );
+       echo "</td></tr>\n";
+}
 ?>
\ No newline at end of file