#===================================================================== # 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 Error qw(:try); use LedgerSMB::Template; use LedgerSMB::Tax; $form->{currency} = 'USD'; 1; # end sub custom_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 open_drawer{ require "pos.conf.pl"; open (PRINTER, "|-", ${'LedgerSMB::Sysconfig::printer'}{Printer}); print PRINTER $pos_config{'rp_cash_open'}; close PRINTER; sleep 1; } 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_till { &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"; } $form->{dontdisplayend} = 1; &display_form; $form->{dontdisplayrows} = 1; $form->{dontdisplayend} = 0; &openinvoices; } sub openinvoices { undef %column_data; undef %column_heading; $form->{customer} = ""; $form->{customer_id} = 0; delete $form->{l_subtotal}; delete $form->{subtotal}; $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)) { $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'); if (!$form->{nextsub}){ $form->{nextsub} = 'add'; } $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/(