#===================================================================== # SQL-Ledger # Copyright (c) DWS Systems Inc. # # Author: DWS Systems Inc. # Web: http://www.sql-ledger.com # #====================================================================== # # Reference Documents # #====================================================================== use SL::RD; require "$form->{path}/js.pl"; 1; sub formnames { my %module = ( ar_transaction => { script => ar, db => ar, var => "type=transaction", label => $locale->text('AR Transaction') }, credit_note => { script => ar, db => ar, var => "type=credit_note", label => $locale->text('Credit Note') }, ap_transaction => { script => ap, db => ap, var => "type=transaction", label => $locale->text('AP Transaction') }, debit_note => { script => ap, db => ap, var => "type=debit_note", label => $locale->text('Debit Note') }, ar_invoice => { script => is, db => ar, var => "type=invoice", label => $locale->text('Sales Invoice') }, credit_invoice => { script => is, db => ar, var => "type=credit_invoice", label => $locale->text('Credit Invoice') }, ap_invoice => { script => ir, db => ap, var => "type=invoice", label => $locale->text('Vendor Invoice') }, debit_invoice => { script => ir, db => ap, var => "type=debit_invoice", label => $locale->text('Debit Invoice') }, sales_order => { script => oe, db => oe, var => "type=sales_order", label => $locale->text('Sales Order') }, sales_quotation => { script => oe, db => oe, var => "type=sales_quotation", label => $locale->text('Quotation') }, purchase_order => { script => oe, db => oe, var => "type=purchase_order", label => $locale->text('Purchase Order') }, request_quotation => { script => oe, db => oe, var => "type=request_quotation", label => $locale->text('RFQ') }, gl => { script => gl, db => gl, label => $locale->text('GL Transaction') }, project => { script => pe, db => oe, var => "type=project", label => $locale->text('Project') }, job => { script => pe, db => project, var => "type=job", label => $locale->text('Job') }, customer => { script => ct, db => customer, var => "db=customer", label => $locale->text('Customer') }, vendor => { script => ct, db => vendor, var => "db=vendor", label => $locale->text('Vendor') }, part => { script => ic, db => parts, var => "item=part", label => $locale->text('Part') }, service => { script => ic, db => parts, var => "item=service", label => $locale->text('Service') }, assembly => { script => ic, db => parts, var => "item=assembly", label => $locale->text('Assembly') }, labor => { script => ic, db => parts, var => "item=labor", label => $locale->text('Labor') }, employee => { script => hr, db => employee, var => "db=employee", label => $locale->text('Employee') }, timecard => { script => jc, db => jcitems, var => "type=timecard", label => $locale->text('Timecard') }, storescard => { script => jc, db => jcitems, var => "type=storescard", label => $locale->text('Stores Card') } ); %module; } sub upload { if ($form->{id}) { &display_documents; exit; } $form->{title} = $locale->text('Upload Document'); $form->helpref("cms", $myconfig{countrycode}); $form->header; $form->{nextsub} = "upload_file"; &resize; $focus = "description"; print qq|
{script}>
$form->{helpref}$form->{title}
|.$locale->text('Description').qq|
|.$locale->text('Folder').qq|
|.$locale->text('Filename').qq|
|.$locale->text('File').qq|

|; $form->hide_form(qw(callback row title nextsub login path)); print qq|
|; } sub upload_file { if ($form->{row}) { $form->header; $form->{filename} = ($form->{file}) ? $form->{file} : $form->{filename}; &pickvalue; for (qw(description filename folder)) { $form->{$_} =~ s/'/\\'/g } print qq| |; } else { $form->{userspath} = $userspath; $form->error($locale->text('No file selected!')) unless $form->{filename}; if (RD->save_document(\%myconfig, \%$form)) { ($script, $argv) = split /\?/, $form->{callback}; %argv = split /[&=]/, $argv; for (qw(action description folder filename)) { delete $form->{$_} } for (keys %argv) { $form->{$_} = $argv{$_} } &list_documents; } else { $form->error($locale->text('Add document failed!')); } } } sub display_documents { $form->{action} = "display_documents"; $form->{title} = $locale->text('Reference Documents'); $form->helpref("cms", $myconfig{countrycode}); if ($form->{id} eq '-') { $form->header; print qq| |; $form->error($locale->text('Document not archived!')); } if ($form->{id}) { if ($data = $form->get_reference(\%myconfig)) { $form->{contenttype} ||= 'text/plain'; print qq|Content-Type: $form->{contenttype} Content-Disposition: inline; filename=$form->{filename};\n\n|; open(OUT, ">-") or $form->error("STDOUT : $!"); binmode(OUT); print OUT $data; close(OUT); } else { $form->error($locale->text('No data!')); } } } sub search_documents { $form->{title} = $locale->text('Reference Documents'); $form->{nextsub} = "list_documents"; $form->helpref("cms", $myconfig{countrycode}); %m = &formnames; $selectformname = "\n"; for (sort { $m{$a}->{label} cmp $m{$b}->{label} } keys %m) { $selectformname .= qq|$m{$_}{label}--$_\n|; } $form->header; $focus = "description"; print qq|
$form->{helpref}$form->{title}
|.$locale->text('Description').qq|
|.$locale->text('Folder').qq|
|.$locale->text('Form').qq|
|.$locale->text('Filename').qq|


|; $form->{action} = $form->{nextsub}; $form->hide_form(qw(action nextsub login path)); if ($form->{menubar}) { require "$form->{path}/menu.pl"; &menubar; } print qq|
|; } sub list_documents { RD->all_documents(\%myconfig, \%$form); $href = "$form->{script}?action=list_documents"; for (qw(direction oldsort path login)) { $href .= qq|&$_=$form->{$_}| } $form->sort_order(); $callback = "$form->{script}?action=list_documents"; for (qw(direction oldsort path login)) { $callback .= qq|&$_=$form->{$_}| } @columns = qw(description folder filename confidential formname); if ($form->{description}) { $option .= "\n
" if ($option); $option .= $locale->text('Description')." : $form->{description}"; $href .= "&description=".$form->escape($form->{description}); $callback .= "&description=$form->{description}"; } if ($form->{filename}) { $option .= "\n
" if ($option); $option .= $locale->text('Filename')." : $form->{filename}"; $href .= "&filename=".$form->escape($form->{filename}); $callback .= "&filename=$form->{filename}"; } if ($form->{folder}) { $option .= "\n
" if ($option); $option .= $locale->text('Folder')." : $form->{folder}"; $href .= "&folder=".$form->escape($form->{folder}); $callback .= "&folder=$form->{folder}"; } if ($form->{formname}) { ($formname) = split /--/, $form->{formname}; $option .= "\n
" if ($option); $option .= $locale->text('Form')." : $formname"; $href .= "&formname=".$form->escape($form->{formname}); $callback .= "&formname=$form->{formname}"; } %module = &formnames; $column_data{delete} = qq||; $column_data{confidential} = qq||.$locale->text('C').qq||; $column_data{description} = qq||.$locale->text('Description').qq||; $column_data{folder} = qq||.$locale->text('Folder').qq||; $column_data{formname} = qq||.$locale->text('Attached to').qq||; $column_data{filename} = qq||.$locale->text('Filename').qq||; $form->{title} = $locale->text('Reference Documents'); $form->{callback} = $callback; $callback = $form->escape($callback,1); @column_index = $form->sort_columns(@columns); unshift @column_index, "delete"; $form->helpref("cms", $myconfig{countrycode}); $form->header; &check_all(qw(allbox_delete id_)); print qq|
$form->{helpref}$form->{title}
$option
|; for (@column_index) { print "\n$column_data{$_}" } print qq| |; $idlabel = $locale->text('ID'); $i = 0; foreach $ref (@{ $form->{all_documents} }) { $i++; for (@column_index) { $column_data{$_} = "" } if ($ref->{formname}) { $column_data{formname} = qq||; if ($module{$ref->{formname}}{script}) { $href="$module{$ref->{formname}}{script}.pl?action=edit&id=$ref->{trans_id}&login=$form->{login}&path=$form->{path}"; $href .= "&$module{$ref->{formname}}{var}" if $module{$ref->{formname}}{var}; $column_data{formname} = qq||; } } if ($ref->{filename}) { $column_data{filename} = qq||; } $column_data{description} = qq||; $column_data{delete} = qq||; if ($ref->{login}) { $column_data{confidential} = qq||; } $j++; $j %= 2; print " "; for (@column_index) { print "\n$column_data{$_}" } print qq| |; } print qq|
$ref->{$_} $module{$ref->{formname}}{label}$module{$ref->{formname}}{label} - $idlabel $ref->{trans_id}{script}?action=display_documents&login=$form->{login}&path=$form->{path}&id=$ref->{archive_id} target=popup>$ref->{filename}{script}?action=edit&login=$form->{login}&path=$form->{path}&id=$ref->{id}&callback=$callback>$ref->{description}{id}>x

|; $form->{rowcount} = $i; %button = ( 'Add Document' => { ndx => 2, key => 'A', value => $locale->text('Add Document') }, 'Delete Documents' => { ndx => 3, key => 'D', value => $locale->text('Delete Documents') }, ); $form->print_button(\%button); $form->hide_form(qw(rowcount folder formname callback login path)); if ($form->{menubar}) { require "$form->{path}/menu.pl"; &menubar; } print qq|
|; } sub add_document { &upload } sub edit { RD->get_document(\%myconfig, \%$form); $form->{title} = $locale->text('Edit Reference Document'); $form->helpref("cms", $myconfig{countrycode}); $form->{confidential} = ($form->{confidential}) ? "checked" : ""; $form->error($locale->text('Reference Document does not exist!')) unless $form->{id}; %module = &formnames; if ($form->{formname}) { $attached = qq| |.$locale->text('Attached to').qq||; if ($module{$form->{formname}}{script}) { $href="$module{$form->{formname}}{script}.pl?action=edit&id=$form->{trans_id}&login=$form->{login}&path=$form->{path}"; $href .= "&$module{$form->{formname}}{var}" if $module{$form->{formname}}{var}; } $attached .= qq|$module{$form->{formname}}{label}|; } $form->header; print qq|
{script}>
$form->{helpref}$form->{title}
$attached
|.$locale->text('Description').qq|
|.$locale->text('Folder').qq|
|.$locale->text('Filename').qq|
|.$locale->text('Confidential').qq| {confidential}>

|; $form->hide_form(qw(callback trans_id formname id archive_id login path)); %button = ('Save' => { ndx => 1, key => 'S', value => $locale->text('Save') }, 'Attach' => { ndx => 2, key => 'A', value => $locale->text('Attach') }, 'Detach' => { ndx => 3, key => 'E', value => $locale->text('Detach') }, 'Delete' => { ndx => 11, key => 'D', value => $locale->text('Delete') } ); delete $button{'Delete'} unless $form->{id}; $form->print_button(\%button); if ($form->{menubar}) { require "$form->{path}/menu.pl"; &menubar; } print qq|
|; } sub detach { $form->redirect($locale->text('Document detached!')) if RD->detach_document(\%myconfig, \%$form); $form->error($locale->text('Could not detach document!')); } sub attach { (undef, $form->{formname}) = split /--/, $form->{formname} if $form->{formname} =~ /--/; %m = &formnames; $selectformname = ""; for (sort { $m{$a}->{label} cmp $m{$b}->{label} } keys %m) { $selectformname .= qq|$m{$_}{label}--$_\n|; $formselected = qq|$m{$_}{label}--$_| if $form->{formname} eq $_; } $form->{title} = $locale->text('Attach Document'); $form->helpref("cms", $myconfig{countrycode}); $form->header; print qq|
$form->{helpref}$form->{title}
|.$locale->text('Description').qq| $form->{description}
|.$locale->text('Folder').qq| $form->{folder}
|.$locale->text('Filename').qq| $form->{file}
|.$locale->text('Attach to').qq|
|.$locale->text('ID').qq|


|; $form->{nextsub} = "do_attach"; $form->{action} = $form->{nextsub}; $form->hide_form(qw(id action description folder file callback nextsub login path)); if ($form->{menubar}) { require "$form->{path}/menu.pl"; &menubar; } print qq|
|; } sub do_attach { %m = &formnames; ($formname, $form->{formname}) = split /--/, $form->{formname}; $form->{db} = $m{$form->{formname}}{db}; $form->redirect($locale->text('Document attached!')) if RD->attach_document(\%myconfig, \%$form); $form->error($locale->text($formname).qq| |.$locale->text('ID').qq| $form->{trans_id} |.$locale->text('does not exist!')); } sub delete { $form->redirect($locale->text('Document deleted!')) if RD->delete_document(\%myconfig, \%$form); $form->error($locale->text('Could not delete document!')); } sub delete_documents { $form->redirect($locale->text('Documents deleted!')) if RD->delete_documents(\%myconfig, \%$form); } sub save { $form->{userspath} = $userspath; $form->redirect($locale->text('Document saved!')) if RD->save_document(\%myconfig, \%$form); $form->error($locale->text('Could not save document!')); } sub upload_image { $form->{title} = $locale->text('Upload Image'); $form->helpref("upload_image", $myconfig{countrycode}); $form->header; $form->{nextsub} = "upload_imagefile"; &resize; print qq|
{script}>
$form->{helpref}$form->{title}
|.$locale->text('File').qq|

|; $form->hide_form(qw(nextsub login path)); print qq|
|; } sub upload_imagefile { if (-s "$userspath/$form->{tmpfile}") { unless ($^O =~ /mswin/i) { $image = `file $userspath/$form->{tmpfile}`; unless ($image =~ /image/) { unlink "$userspath/$form->{tmpfile}"; $form->error($locale->text('Not an Image file!')); } } open(IN, "$userspath/$form->{tmpfile}") or $form->error("$userspath/$form->{tmpfile} : $!\n"); open(OUT, "> $images/$myconfig{dbname}/$form->{filename}") or $form->error("$images/$myconfig{dbname}/$form->{filename} : $!\n"); binmode(IN); binmode(OUT); while () { print OUT $_; } close(IN); close(OUT); } unlink "$userspath/$form->{tmpfile}"; &list_images; } sub list_images { opendir DIR, "$images/$myconfig{dbname}" or $form->error("$images/$myconfig{dbname} : $!"); @files = grep !/^\.\.?$/, readdir DIR; closedir DIR; @column_index = qw(ndx filename image); $form->{allbox} = ($form->{allbox}) ? "checked" : ""; $action = ($form->{deselect}) ? "deselect_all" : "select_all"; $column_data{ndx} = qq|{allbox} onChange="CheckAll(); javascript:document.main.submit()">|; $column_data{filename} = "".$locale->text('Filename').""; $column_data{image} = "".$locale->text('Image').""; $form->{callback} = "$form->{script}?action=list_images&path=$form->{path}&login=$form->{login}"; $form->header; &check_all(qw(allbox ndx_)); print qq|
$form->{helpref}$form->{title}
|; for (@column_index) { print "\n$column_data{$_}" } print qq| |; $checked = ($form->{deselect}) ? "checked" : ""; $i = 0; for (@files) { $i++; $column_data{ndx} = qq||; $column_data{filename} = qq||; $column_data{image} = ""; $j++; $j %= 2; print ""; for (@column_index) { print "\n$column_data{$_}" } print qq| |; } print qq|
$_

|; $form->{rowcount} = $i; $form->hide_form(qw(rowcount callback path login)); %button = ('Select all' => { ndx => 2, key => 'A', value => $locale->text('Select all') }, 'Deselect all' => { ndx => 3, key => 'A', value => $locale->text('Deselect all') }, 'Add File' => { ndx => 4, key => 'I', value => $locale->text('Add File') }, 'Delete Files' => { ndx => 5, key => 'D', value => $locale->text('Delete Files') } ); if ($form->{deselect}) { delete $button{'Select all'}; } else { delete $button{'Deselect all'}; } $form->print_button(\%button); if ($form->{menubar}) { require "$form->{path}/menu.pl"; &menubar; } print qq|
|; } sub select_all { $form->{allbox} = 1; $form->{deselect} = 1; for (qw(allbox deselect)) { $form->{callback} .= "&$_=$form->{$_}" } $form->redirect; } sub deselect_all { $form->redirect; } sub add_file { &upload_image } sub delete_files { for $i (1 .. $form->{rowcount}) { if ($form->{"ndx_$i"}) { unlink qq|$images/$myconfig{dbname}/$form->{"ndx_$i"}|; } } $form->redirect; } sub continue { &{ $form->{nextsub} } };