$main::lxdebug->leave_sub();
}
+sub get_projects {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $dbh, $key) = @_;
+
+ my ($all, $old_id, $where, @values);
+
+ if (ref($key) eq "HASH") {
+ my $params = $key;
+
+ $key = "ALL_PROJECTS";
+
+ foreach my $p (keys(%{$params})) {
+ if ($p eq "all") {
+ $all = $params->{$p};
+ } elsif ($p eq "old_id") {
+ $old_id = $params->{$p};
+ } elsif ($p eq "key") {
+ $key = $params->{$p};
+ }
+ }
+ }
+
+ if (!$all) {
+ $where = "WHERE active ";
+ if ($old_id) {
+ $where .= " OR (id = ?) ";
+ push(@values, $old_id);
+ }
+ }
+
+ my $query =
+ qq|SELECT id, projectnumber, description, active | .
+ qq|FROM project | .
+ $where .
+ qq|ORDER BY lower(projectnumber)|;
+ my $sth = $dbh->prepare($query);
+ $sth->execute(@values) ||
+ $self->dberror($query . " (" . join(", ", @values) . ")");
+
+ $self->{$key} = [];
+ while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ push(@{ $self->{$key} }, $ref);
+ }
+
+ $sth->finish;
+ $main::lxdebug->leave_sub();
+}
+
sub get_lists {
$main::lxdebug->enter_sub();
$sth->finish;
}
+ if ($params{"projects"} || $params{"all_projects"}) {
+ $self->get_projects($dbh, $params{"all_projects"} ?
+ $params{"all_projects"} : $params{"projects"},
+ $params{"all_projects"} ? 1 : 0);
+ }
+
$dbh->disconnect();
$main::lxdebug->leave_sub();
use Data::Dumper;
+use SL::DBUtils;
+
sub projects {
$main::lxdebug->enter_sub();
my $sortorder = ($form->{sort}) ? $form->{sort} : "projectnumber";
- my $query = qq|SELECT p.id, p.projectnumber, p.description
+ my $query = qq|SELECT p.id, p.projectnumber, p.description, p.active
FROM project p
WHERE 1 = 1|;
FROM project p, orderitems o
WHERE p.id = o.project_id)";
}
+ if ($form->{active} eq "active") {
+ $query .= " AND p.active";
+ } elsif ($form->{active} eq "inactive") {
+ $query .= " AND NOT p.active";
+ }
$query .= qq|
ORDER BY $sortorder|;
# connect to database
my $dbh = $form->dbconnect($myconfig);
- map { $form->{$_} =~ s/\'/\'\'/g } qw(projectnumber description);
+ my @values = ($form->{projectnumber}, $form->{description});
if ($form->{id}) {
- $query = qq|UPDATE project SET
- projectnumber = '$form->{projectnumber}',
- description = '$form->{description}'
- WHERE id = $form->{id}|;
+ $query =
+ qq|UPDATE project SET projectnumber = ?, description = ?, active = ? | .
+ qq|WHERE id = ?|;
+ push(@values, $form->{active} ? 't' : 'f', $form->{id});
} else {
- $query = qq|INSERT INTO project
- (projectnumber, description)
- VALUES ('$form->{projectnumber}', '$form->{description}')|;
+ $query =
+ qq|INSERT INTO project (projectnumber, description, active) | .
+ qq|VALUES (?, ?, 't')|;
}
- $dbh->do($query) || $form->dberror($query);
+ do_query($form, $dbh, $query, @values);
$dbh->disconnect;
$form->{"select$form->{vc}"} = $form->quote($form->{"select$form->{vc}"});
$form->get_lists("contacts" => "ALL_CONTACTS",
- "shipto" => "ALL_SHIPTO");
+ "shipto" => "ALL_SHIPTO",
+ "projects" => { "key" => "ALL_PROJECTS",
+ "all" => 0,
+ "old_id" => $form->{"globalproject_id"} });
my (%labels, @values);
foreach my $item (@{ $form->{"ALL_CONTACTS"} }) {
$item->{"shiptoname"} . " " . $item->{"shiptodepartment_1"};
}
+ %labels = ();
+ @values = ("");
+ foreach my $item (@{ $form->{"ALL_PROJECTS"} }) {
+ push(@values, $item->{"id"});
+ $labels{$item->{"id"}} = $item->{"projectnumber"};
+ }
+ my $globalprojectnumber =
+ $cgi->popup_menu('-name' => 'globalproject_id', '-values' => \@values,
+ '-labels' => \%labels,
+ '-default' => $form->{"globalproject_id"});
+
my $shipto = qq|
<th align=right>| . $locale->text('Shipping Address') . qq|</th>
<td>| .
$ordnumber
<tr>
<th width="70%" align="right" nowrap>| . $locale->text('Project Number') . qq|</th>
- <td>
- <input name="globalprojectnumber" size="11" value="| . Q($form->{globalprojectnumber}) . qq|">
- <input type="hidden" name="oldglobalprojectnumber" value="| . Q($form->{globalprojectnumber}) . qq|">
- <input type="hidden" name="globalproject_id" value="| . Q($form->{globalproject_id}) . qq|">
- </td>
+ <td>$globalprojectnumber</td>
</tr>
</table>
</td>
use SL::PE;
+require "bin/mozilla/common.pl";
+
1;
# end of main
$number = qq|
<tr>
<th align=right width=1%>| . $locale->text('Number') . qq|</th>
- <td><input name=projectnumber size=20></td>
+ <td>| . $cgi->textfield('-name' => 'projectnumber', '-size' => 20) . qq|</td>
</tr>
<tr>
<th align=right>| . $locale->text('Description') . qq|</th>
- <td><input name=description size=60></td>
+ <td>| . $cgi->textfield('-name' => 'description', '-size' => 60) . qq|</td>
</tr>
+ <tr>
+ <th> </th>
+ <td>| .
+ $cgi->radio_group('-name' => 'active', '-default' => 'active',
+ '-values' => ['active', 'inactive', 'both'],
+ '-labels' => { 'active' => ' ' . $locale->text("Active"),
+ 'inactive' => ' ' . $locale->text("Inactive"),
+ 'both' => ' ' . $locale->text("Both") })
+ . qq|</td>
+ </tr>
|;
}
PE->projects(\%myconfig, \%$form);
$callback =
- "$form->{script}?action=project_report&type=$form->{type}&path=$form->{path}&login=$form->{login}&password=$form->{password}&status=$form->{status}";
+ "$form->{script}?action=project_report&type=$form->{type}&path=$form->{path}&login=$form->{login}&password=$form->{password}&status=$form->{status}&active=" .
+ E($form->{active});
$href = $callback;
if ($form->{status} eq 'all') {
"\n<br>" . $locale->text('Description') . " : $form->{description}";
}
- @column_index = $form->sort_columns(qw(projectnumber description));
+ @column_index = qw(projectnumber description);
+
+ push(@column_index, "active") if ("both" eq $form->{active});
$column_header{projectnumber} =
qq|<th><a class=listheading href=$href&sort=projectnumber>|
qq|<th><a class=listheading href=$href&sort=description>|
. $locale->text('Description')
. qq|</a></th>|;
+ $column_header{active} =
+ qq|<th class="listheading">| . $locale->text('Active') . qq|</th>|;
$form->{title} = $locale->text('Projects');
$column_data{projectnumber} =
qq|<td><a href=$form->{script}?action=edit&type=$form->{type}&status=$form->{status}&id=$ref->{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{projectnumber}</td>|;
$column_data{description} = qq|<td>$ref->{description} </td>|;
+ $column_data{active} =
+ qq|<td>| .
+ ($ref->{active} ? $locale->text("Yes") : $locale->text("No")) .
+ qq|</td>|;
map { print "$column_data{$_}\n" } @column_index;
$form->{description} =~ s/\"/"/g;
+ my $projectnumber =
+ $cgi->textfield('-name' => 'projectnumber', '-size' => 20,
+ '-default' => $form->{projectnumber});
+
+ my $description;
if (($rows = $form->numtextrows($form->{description}, 60)) > 1) {
$description =
- qq|<textarea name="description" rows=$rows cols=60 style="width: 100%" wrap=soft>$form->{description}</textarea>|;
+ $cgi->textarea('-name' => 'description', '-rows' => $rows, '-cols' => 60,
+ '-style' => 'width: 100%', '-wrap' => 'soft',
+ '-default' => $form->{description});
} else {
$description =
- qq|<input name=description size=60 value="$form->{description}">|;
+ $cgi->textfield('-name' => 'description', '-size' => 60,
+ '-default' => $form->{description});
+ }
+
+ my $active;
+ if ($form->{id}) {
+ $active =
+ qq|
+ <tr>
+ <th> </th>
+ <td>| .
+ $cgi->radio_group('-name' => 'active',
+ '-values' => [1, 0],
+ '-default' => $form->{active} * 1,
+ '-labels' => { 1 => $locale->text("Active"),
+ 0 => $locale->text("Inactive") })
+ . qq|</td>
+ </tr>
+|;
}
$form->header;
<table>
<tr>
<th align=right>| . $locale->text('Number') . qq|</th>
- <td><input name=projectnumber size=20 value="$form->{projectnumber}"></td>
+ <td>$projectnumber</td>
</tr>
<tr>
<th align=right>| . $locale->text('Description') . qq|</th>
<td>$description</td>
</tr>
+ $active
</table>
</td>
</tr>
'Bis Konto: ' => 'bis Konto: ',
'Body:' => 'Text:',
'Books are open' => 'Die Bücher sind geöffnet.',
+ 'Both' => 'Sowohl als auch',
'Bought' => 'Gekauft',
'Buchungsdatum' => 'Buchungsdatum',
'Buchungsgruppe' => 'Buchungsgruppe',
'Import CSV' => '',
'In Lx-Office 2.4.0 the administrator has to enter a list of units in the administrative section.' => 'In Lx-Office 2.4.0 muss der Administrator in den Systemeinstellungen eine Liste von verwendbaren Einheiten angeben.',
'In-line' => 'im Text',
+ 'Inactive' => 'Inaktiv',
'Include Exchangerate Difference' => 'Wechselkursunterschied einbeziehen',
'Include in Report' => 'In Bericht aufnehmen',
'Include in drop-down menus' => 'In Aufklappmenü aufnehmen',
'post' => 'post',
'post_as_new' => 'post_as_new',
'prepare_credit_note' => 'prepare_credit_note',
- 'preset_projectnumber' => 'preset_projectnumber',
'preview' => 'preview',
'print' => 'print',
'print_and_post' => 'print_and_post',
'order' => 'order',
'part_selection_internal' => 'part_selection_internal',
'post_as_new' => 'post_as_new',
- 'preset_projectnumber' => 'preset_projectnumber',
'print' => 'print',
'print_dunning' => 'print_dunning',
'print_form' => 'print_form',
'parts_language_selection' => 'parts_language_selection',
'parts_subtotal' => 'parts_subtotal',
'post_as_new' => 'post_as_new',
- 'preset_projectnumber' => 'preset_projectnumber',
'price_row' => 'price_row',
'print' => 'print',
'print_form' => 'print_form',
'order' => 'order',
'part_selection_internal' => 'part_selection_internal',
'post_as_new' => 'post_as_new',
- 'preset_projectnumber' => 'preset_projectnumber',
'print' => 'print',
'print_form' => 'print_form',
'print_options' => 'print_options',
'post_as_new' => 'post_as_new',
'post_payment' => 'post_payment',
'prepare_invoice' => 'prepare_invoice',
- 'preset_projectnumber' => 'preset_projectnumber',
'print' => 'print',
'print_form' => 'print_form',
'print_options' => 'print_options',
'post_as_new' => 'post_as_new',
'post_payment' => 'post_payment',
'prepare_invoice' => 'prepare_invoice',
- 'preset_projectnumber' => 'preset_projectnumber',
'preview' => 'preview',
'print' => 'print',
'print_and_post' => 'print_and_post',
'poso' => 'poso',
'post_as_new' => 'post_as_new',
'prepare_order' => 'prepare_order',
- 'preset_projectnumber' => 'preset_projectnumber',
'print' => 'print',
'print_form' => 'print_form',
'print_options' => 'print_options',
$self->{texts} = {
+ 'Active' => 'Aktiv',
'Add' => 'Erfassen',
'Add Group' => 'Warengruppe erfassen',
'Add Pricegroup' => 'Preisgruppe erfassen',
'Add Project' => 'Projekt erfassen',
'All' => 'Alle',
+ 'Both' => 'Sowohl als auch',
'Continue' => 'Weiter',
'Delete' => 'Löschen',
'Description' => 'Beschreibung',
'Group missing!' => 'Warengruppe fehlt!',
'Group saved!' => 'Warengruppe gespeichert!',
'Groups' => 'Warengruppen',
+ 'Inactive' => 'Inaktiv',
+ 'No' => 'Nein',
'Number' => 'Nummer',
'Orphaned' => 'Nie benutzt',
'Preisgruppe' => 'Preisgruppe',
'Project saved!' => 'Projekt gespeichert!',
'Projects' => 'Projekte',
'Save' => 'Speichern',
+ 'Yes' => 'Ja',
};
$self->{subs} = {
--- /dev/null
+-- @tag: project
+-- @description: Spalte bei den Projekten zur Markierung auf aktiv/inaktiv
+-- @depends: release_2_4_1
+ALTER TABLE project ADD COLUMN active boolean;
+ALTER TABLE project ALTER COLUMN active SET DEFAULT 't';
+UPDATE project SET active = 't';