#===================================================================== # LedgerSMB Small Medium Business Accounting # 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: Steve Doerr # # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #===================================================================== # # POS # #===================================================================== use LedgerSMB::Tax; 1; # end sub check_alert { my $rc = $form->{'rowcount'}; if (!$form->{"partnumber_$rc"}){ --$rc; # Ensures that alert shows up when item is selected from a list; } for (1 .. $rc){ $form->{'check_id'} = ($form->{'check_id'} || $form->{"check_id_$_"}); } } sub send_to_pd{ socket(SOCK, 2, 1, getprotobynumber($pos_config{'pd_proto'})); connect(SOCK, $pos_config{'pd_dest'}); my $rn = $numrows - 1; my $ds_string = sprintf ( '%s%s @ $%-7.2f%s%s%s', $pd_control{'new_line'}, $form->{"qty_$rn"}, $form->{"sellprice_$rn"}, $pd_control{'new_line'}, "Subtotal: \$".sprintf('%-7.2f', $form->{'invtotal'}) ); print SOCK $ds_string; close SOCK; } sub on_update{ &send_to_pd; &check_alert; } sub open_drawer{ open (PRINTER, "|-", ${LedgerSMB::Sysconfig::printer}{Printer}); print PRINTER $pos_config{'rp_cash_open'}; close PRINTER; sleep 1; } sub open { &open_drawer; &update; } sub add { $form->{nextsub} = 'add'; $form->{title} = $locale->text('Add POS Invoice'); $form->{callback} = "$form->{script}?action=$form->{nextsub}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}"; &invoice_links; $form->{type} = "pos_invoice"; $form->{format} = "txt"; $form->{media} = ($myconfig{printer}) ? $myconfig{printer} : "screen"; $form->{rowcount} = 0; $form->{readonly} = ($myconfig{acs} =~ /POS--Sale/) ? 1 : 0; $ENV{REMOTE_ADDR} =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; $form->{till} = $4; $form->{partsgroup} = ""; for (@{ $form->{all_partsgroup} }) { $form->{partsgroup} .= "$_->{partsgroup}--$_->{translation}\n"; } &display_form; $form->{dontdisplayrows} = 1; &openinvoices; } sub openinvoices { undef %column_data; undef %column_heading; $ENV{REMOTE_ADDR} =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; $form->{till} = $4; $form->{sort} = 'transdate'; for (qw(open l_invnumber l_transdate l_name l_amount l_curr l_till l_subtotal)) { $form->{$_} = 'Y'; } if ($myconfig{role} ne 'user') { $form->{l_employee} = 'Y'; } $form->{title} = $locale->text('Open'); transactions; } sub edit { $form->{title} = $locale->text('Edit POS Invoice'); $form->{callback} = "$form->{script}?action=$form->{nextsub}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}"; &invoice_links; &prepare_invoice; $form->{type} = "pos_invoice"; $form->{format} = "txt"; $form->{media} = ($myconfig{printer}) ? $myconfig{printer} : "screen"; $form->{readonly} = ($myconfig{acs} =~ /POS--Sale/) ? 1 : 0; $form->{partsgroup} = ""; for (@{ $form->{all_partsgroup} }) { $form->{partsgroup} .= "$_->{partsgroup}--$_->{translation}\n"; } &display_form; } sub form_header { if (!$form->{'check_id'}){ &check_alert; } # set option selected for (qw(AR currency)) { $form->{"select$_"} =~ s/ selected//; $form->{"select$_"} =~ s/option>\Q$form->{$_}\E/option selected>$form->{$_}/; } for (qw(customer department employee)) { $form->{"select$_"} = $form->unescape($form->{"select$_"}); $form->{"select$_"} =~ s/ selected//; $form->{"select$_"} =~ s/(