.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "LedgerSMB::PE 3pm" .TH LedgerSMB::PE 3pm "2014-06-10" "perl v5.18.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" LedgerSMB::PE \- Support functions for projects, partsgroups, and parts .SH "SYNOPSIS" .IX Header "SYNOPSIS" Support functions for projects, partsgroups, and parts .SH "COPYRIGHT" .IX Header "COPYRIGHT" .Vb 10 \& #==================================================================== \& # LedgerSMB \& # Small Medium Business Accounting software \& # http://www.ledgersmb.org/ \& # \& # Copyright (C) 2006 \& # This work contains copyrighted information from a number of sources \& # all used with permission. \& # \& # This file contains source code included with or based on SQL\-Ledger \& # which is Copyright Dieter Simader and DWS Systems Inc. 2000\-2005 \& # and licensed under the GNU General Public License version 2 or, at \& # your option, any later version. For a full list including contact \& # information of contributors, maintainers, and copyright holders, \& # see the CONTRIBUTORS file. \& # \& # Original Copyright Notice from SQL\-Ledger 2.6.17 (before the fork): \& # Copyright (C) 2003 \& # \& # Author: DWS Systems Inc. \& # Web: http://www.sql\-ledger.org \& # \& # Contributors: \& # \& #==================================================================== \& # \& # This file has undergone whitespace cleanup. \& # \& #==================================================================== \& # \& # Project module \& # also used for partsgroups \& # \& #==================================================================== .Ve .SH "METHODS" .IX Header "METHODS" .ie n .IP "\s-1PE\-\s0>($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->($myconfig, $form);" Populates the list referred to as \f(CW$form\fR\->{all_project} with hashes containing details about projects. Each hash contains the project record's fields along with the name of any associated customer. If \f(CW$form\fR\->{status} is 'orphaned', only add projects that aren't referred to in any transactions, invoices, orders, or time cards. If \f(CW$form\fR\->{status} is 'active', only projects that have not reached their enddate are added; when \f(CW$form\fR\->{status} is 'inactive', only add projects that have reached their enddates. When \f(CW$form\fR\->{year} and \&\f(CW$form\fR\->{month} are set, use their values, along with that of \f(CW$form\fR\->{interval}, to set the startdatefrom and startdateto attributes of \f(CW$form\fR. These attributes are used to prepare a date range for accepted start dates. Both \&\f(CW$form\fR\->{description} and \f(CW$form\fR\->{projectnumber} are used to limit the results. .Sp Returns the number of projects added to the list. \f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>get_project($myconfig, $form)" 4 .el .IP "\s-1PE\-\s0>get_project($myconfig, \f(CW$form\fR)" 4 .IX Item "PE->get_project($myconfig, $form)" If \f(CW$form\fR\->{id} is set, populates the \f(CW$form\fR attributes projectnumber, description, startdate, enddate, parts_id, production, completed, and customer_id with details from the project record and name with the associated customer name. If the project is not used in any transaction, invoice, order, or time card, \f(CW$form\fR\->{orphaned} is set to true, otherwise false. .Sp Even if \f(CW$form\fR\->{id} is false, \s-1PE\-\s0>get_customer is run, along with any custom \&\s-1SELECT\s0 queries for the table 'project'. .ie n .IP "\s-1PE\-\s0>save_project($myconfig, $form)" 4 .el .IP "\s-1PE\-\s0>save_project($myconfig, \f(CW$form\fR)" 4 .IX Item "PE->save_project($myconfig, $form)" Updates a project, or adds a new one if \f(CW$form\fR\->{id} is not set. .Sp The \f(CW$form\fR attributes of startdate, enddate, customer_id, description, and projectnumber are used for the project record. If \f(CW$form\fR\->{projectnumber} is false, a new one is obtained through \f(CW$form\fR\->update_defaults. When a new project is added, \f(CW$form\fR\->{id} is set to that new id. Any custom queries for \&\s-1UPDATE\s0 on the project table are run. .ie n .IP "\s-1PE\-\s0>list_stock($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>list_stock($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->list_stock($myconfig, $form);" Populates the list referred to as \f(CW$form\fR\->{all_project} with hashes that contain details about projects. .Sp Sets \f(CW$form\fR\->{stockingdate} to the current date if it is not already set. .Sp This function is probably unused. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>jobs($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>jobs($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->jobs($myconfig, $form);" This function is probably unused. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>get_job($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>get_job($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->get_job($myconfig, $form);" This function is probably unused as part of Dieter's incomplete job costing. .ie n .IP "\s-1PE\-\s0>get_customer($myconfig, $form[, $dbh]);" 4 .el .IP "\s-1PE\-\s0>get_customer($myconfig, \f(CW$form\fR[, \f(CW$dbh\fR]);" 4 .IX Item "PE->get_customer($myconfig, $form[, $dbh]);" Populates the list referred to as \f(CW$form\fR\->{all_customer} with hashes containing the ids and names of customers unless the number of customers added would be greater than or equal to \f(CW$myconfig\fR\->{vclimit}. \f(CW$form\fR\->{startdate} and \&\f(CW$form\fR\->{enddate} form a date range to limit the results. If \&\f(CW$form\fR\->{customer_id} is set, then the customer with that id will be in the result set. .ie n .IP "\s-1PE\-\s0>save_job($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>save_job($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->save_job($myconfig, $form);" Yet another save function. This one is related to the incomplete job handling. .ie n .IP "\s-1PE\-\s0>stock_assembly($myconfig, $form)" 4 .el .IP "\s-1PE\-\s0>stock_assembly($myconfig, \f(CW$form\fR)" 4 .IX Item "PE->stock_assembly($myconfig, $form)" Looks like more of that job control code. \s-1IC\s0.pm has the functions actually used by assemblies. .ie n .IP "\s-1PE\-\s0>delete_project($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>delete_project($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->delete_project($myconfig, $form);" Deletes the database entry in project identified by \f(CW$form\fR\->{id} and associated translations. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>delete_partsgroup($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>delete_partsgroup($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->delete_partsgroup($myconfig, $form);" Deletes the entry in partsgroup identified by \f(CW$form\fR\->{id} and associated translations. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>delete_pricegroup($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>delete_pricegroup($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->delete_pricegroup($myconfig, $form);" Deletes the pricegroup entry identified by \f(CW$form\fR\->{id}. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>delete_job($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>delete_job($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->delete_job($myconfig, $form);" An \*(L"enhanced\*(R" variant of \s-1PE\-\s0>delete_project. In addition to deleting the project identified by \f(CW$form\fR\->{id} and the associated translations, also deletes all parts and assemblies with \f(CW$form\fR\->{id} as a project_id. This function adds an audit trail entry for the table 'project' and the action 'deleted' where the formname is taken from \f(CW$form\fR\->{type}. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>partsgroups($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>partsgroups($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->partsgroups($myconfig, $form);" Populates the list referred to as \f(CW$form\fR\->{item_list} with hashes containing the id and partsgroup (name) for all the partsgroups in the database. If \&\f(CW$form\fR\->{partsgroup} is non-empty, the results are limited to the partsgroups that contain that value in their name (case insensitive). If \f(CW$form\fR\->{status} is 'orphaned', only partsgroups that are not associated with a part are added. The number of partsgroups added to \f(CW$form\fR\->{item_list} is returned. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>save_partsgroup($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>save_partsgroup($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->save_partsgroup($myconfig, $form);" Save a partsgroup record. If \f(CW$form\fR\->{id} is set, update the description of the partsgroup with that id to be \f(CW$form\fR\->{partsgroup}. Otherwise, create a new partsgroup with that description. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>get_partsgroup($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>get_partsgroup($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->get_partsgroup($myconfig, $form);" Sets \f(CW$form\fR\->{partsgroup} to the description of the partsgroup identified by \&\f(CW$form\fR\->{id}. If there are no parts entries associated with that partsgroup, \&\f(CW$form\fR\->{orphaned} is made true, otherwise it is set to false. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>pricegroups($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>pricegroups($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->pricegroups($myconfig, $form);" Populates the list referred to as \f(CW$form\fR\->{item_list} with hashes containing details (id and pricegroup (description)) about pricegroups. All the groups are added unless \f(CW$form\fR\->{pricegroup} is set, in which case it will search for groups with that description, or \f(CW$form\fR\->{status} is 'orphaned', which limits the results to those not related to any customers (partscustomer table). The return value is the number of pricegroups added to the list. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>save_pricegroup($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>save_pricegroup($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->save_pricegroup($myconfig, $form);" Adds or updates a pricegroup. If \f(CW$form\fR\->{id} is set, update the pricegroup value using \f(CW$form\fR\->{pricegroup}. If \f(CW$form\fR\->{id} is not set, adds a new pricegroup with a pricegroup value of \f(CW$form\fR\->{pricegroup}. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>get_pricegroup($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>get_pricegroup($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->get_pricegroup($myconfig, $form);" Sets \f(CW$form\fR\->{pricegroup} to the description of the pricegroup identified by \&\f(CW$form\fR\->{id}. If the pricegroup is not mentioned in partscustomer, \&\f(CW$form\fR\->{orphaned} is set true, otherwise false. .ie n .IP "PE::description_translations('', $myconfig, $form);" 4 .el .IP "PE::description_translations('', \f(CW$myconfig\fR, \f(CW$form\fR);" 4 .IX Item "PE::description_translations('', $myconfig, $form);" Populates the list referred to as \f(CW$form\fR\->{translations} with hashes detailing non-obsolete goods and services and their translated descriptions. The main details hash immediately precedes its set of translations and has the attributes id, partnumber, and description. The translations have the attributes id (same as in the main hash), language, translation, and code. .Sp When \f(CW$form\fR\->{id} is set, only adds an entry for the item having that id, but also populates \f(CW$form\fR\->{all_language} using PE::get_language. The attributes partnumber and description are searchable and if set, will limit the results to only those that match them. .Sp \&\f(CW$myconfig\fR is unused. \f(CW$form\fR\->{trans_id} is set to the last encountered part id. .ie n .IP "PE::partsgroup_translations("""", $myconfig, $form)" 4 .el .IP "PE::partsgroup_translations(``'', \f(CW$myconfig\fR, \f(CW$form\fR)" 4 .IX Item "PE::partsgroup_translations("""", $myconfig, $form)" Populates the list referred to as \f(CW$form\fR\->{translations} with hashrefs containing details about partsgroups and their translated names. A master hash contains the id and description of the partsgroup and is immediately followed by its translation hashes, which contain the language, translation, and code of the translation. The list contains the details for all partsgroups unless \&\f(CW$form\fR\->{description} is set, in which case only partsgroups with a matching description are included, or \f(CW$form\fR\->{id} is set. When \f(CW$form\fR\->{id} is set, only translations for the partgroup with that are included and \f(CW$form\fR\->{all_language} is populated by get_language. .Sp \&\f(CW$myconfig\fR is unused. \f(CW$form\fR\->{trans_id} is set to the last id encountered. .ie n .IP "PE::project_translations("""", $myconfig, $form)" 4 .el .IP "PE::project_translations(``'', \f(CW$myconfig\fR, \f(CW$form\fR)" 4 .IX Item "PE::project_translations("""", $myconfig, $form)" Populates the list referred to as \f(CW$form\fR\->{translations} with hashrefs containing details about projects and their translated names. A master hash contains the id, project number, and description of the project and is immediately followed by its translation hashes, which have the same id as the master and also contain the language, translation, and code of the translation. The list contains the details for all projects unless \f(CW$form\fR\->{description} or \&\f(CW$form\fR\->{projectnumber} is set, in which case only projects that match the appropriate field are included, or \f(CW$form\fR\->{id} is set. When \f(CW$form\fR\->{id} is set, only translations for the project with that id are included and \&\f(CW$form\fR\->{all_language} is populated by get_language. .Sp \&\f(CW$myconfig\fR is unused. \f(CW$form\fR\->{trans_id} is set to the last encountered id. .ie n .IP "PE::get_language("""", $dbh, $form)" 4 .el .IP "PE::get_language(``'', \f(CW$dbh\fR, \f(CW$form\fR)" 4 .IX Item "PE::get_language("""", $dbh, $form)" Populates the list referred to as \f(CW$form\fR\->{all_language} with hashes containing the code and description of all languages registered with the system in the language table. .ie n .IP "PE::save_translation("""", $myconfig, $form);" 4 .el .IP "PE::save_translation(``'', \f(CW$myconfig\fR, \f(CW$form\fR);" 4 .IX Item "PE::save_translation("""", $myconfig, $form);" Deletes all translations with the trans_id (part id, project id, or partsgroup id) of \f(CW$form\fR\->{id} then adds new entries for \f(CW$form\fR\->{id}. The number of translation entries is obtained from \f(CW$form\fR\->{translation_rows}. The actual translation entries are derived from \f(CW$form\fR\->{language_code_\fIi\fR} and \&\f(CW$form\fR\->{translation_\fIi\fR}, where \fIi\fR is some integer between 1 and \&\f(CW$form\fR\->{translation_rows} inclusive. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "PE::delete_translation("""", $myconfig, $form);" 4 .el .IP "PE::delete_translation(``'', \f(CW$myconfig\fR, \f(CW$form\fR);" 4 .IX Item "PE::delete_translation("""", $myconfig, $form);" Deletes all translation entries that have the trans_id of \f(CW$form\fR\->{id}. .Sp \&\f(CW$myconfig\fR is unused. .IP "\s-1PE\-\s0>timecard_get_currency($form);" 4 .IX Item "PE->timecard_get_currency($form);" Sets \f(CW$form\fR\->{currency} to the currency set for the customer who has the id \&\f(CW$form\fR\->{customer_id}. .ie n .IP "PE::project_sales_order("""", $myconfig, $form)" 4 .el .IP "PE::project_sales_order(``'', \f(CW$myconfig\fR, \f(CW$form\fR)" 4 .IX Item "PE::project_sales_order("""", $myconfig, $form)" Executes \f(CW$form\fR\->all_years, \f(CW$form\fR\->all_projects, and \f(CW$form\fR\->all_employees, with a limiting transdate of the current date. .ie n .IP "\s-1PE\-\s0>get_jcitems($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>get_jcitems($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->get_jcitems($myconfig, $form);" This function is used as part of the sales order generation accessible from the projects interface, to generate the list of possible orders. .Sp Populates the list referred to as \f(CW$form\fR\->{jcitems} with hashes containing details about sales orders that can be generated that relate to projects. Each of the hashes has the attributes id (timecard id), description (timecard description), qty (unallocated chargeable hours), sellprice (hourly rate), parts_id (service id), customer_id, project_id, transdate (date on timecard), notes, customer (customer name), projectnumber, partnumber, taxaccounts (space separated list that contains the account numbers of taxes that apply to the service), and amount (qty*sellprice). If \f(CW$form\fR\->{summary} is true, the description field contains the service description instead of the timecard description. .Sp All possible, unconsolidated sales orders are normally listed. If \&\f(CW$form\fR\->{projectnumber} is set, only orders associated with the project are listed. \f(CW$form\fR\->{employee} limits the list to timecards with the given employee. When \f(CW$form\fR\->{year} and \f(CW$form\fR\->{month} are set, the transdatefrom and transdateto attributes are populated with values derived from the year, month, and interval \&\f(CW$form\fR attributes. \f(CW$form\fR\->{transdatefrom} is used to limit the results to time cards checked in on or after that date. \f(CW$form\fR\->{transdateto} limits to time cards checked out on or before the provided date. \f(CW$form\fR\->{vc} must be \&'customer'. .Sp Regardless of the values added to \f(CW$form\fR\->{jcitems}, this function sets \&\f(CW$form\fR\->{currency} and \f(CW$form\fR\->{defaultcurrency} to the first currency mentioned in defaults. It also fills \f(CW$form\fR\->{taxaccounts} with a space separated list of the account numbers of all tax accounts and for each accno forms a \&\f(CW$form\fR\->{${accno}_rate} attribute that contains the tax's rate as expressed in the tax table. .Sp \&\f(CW$myconfig\fR is unused. .ie n .IP "\s-1PE\-\s0>allocate_projectitems($myconfig, $form);" 4 .el .IP "\s-1PE\-\s0>allocate_projectitems($myconfig, \f(CW$form\fR);" 4 .IX Item "PE->allocate_projectitems($myconfig, $form);" Updates the jcitems table to adjust the allocated quantities of time. The time cards, and allocated time, to update is obtained from the various space separated lists \f(CW$form\fR\->{jcitems_\fIi\fR}, where \fIi\fR is between 1 and the value of \&\f(CW$form\fR\->{rowcount}. Each element of those space separated lists is a colon separated pair where the first element is the time card id and the second element is the increase in allocated hours. .Sp \&\f(CW$myconfig\fR is unused.