1 package C4::InterfaceCDK; #assumes C4/InterfaceCDK
9 use C4::Circulation::Borrissues;
10 use C4::Circulation::Renewals;
15 use vars qw($VERSION @ISA @EXPORT);
17 # set the version for version checking
21 @EXPORT = qw(&dialog &startint &endint &output &clearscreen &pause &helptext
22 &textbox &menu &issuewindow &msg_yn &msg_ny &borrower_dialog &debug_msg &error_msg
23 &info_msg &selborrower &returnwindow &logondialog &borrowerwindow &titlepanel
24 &borrbind &borrfill &preeborr &borrowerbox &brmenu &prmenu);
27 # is this planned for something?
36 my ($env,$type,$title,@items)=@_;
37 $env->{'sysarea'}="Menu";
38 my $titlebar=titlepanel($env,"Koha","Main Menu");
43 while ($items[$x] ne "") {
44 $mitems[$x]="<C>".$items[$x];
47 if ($type eq 'console'){
49 my $menu = new Cdk::Scroll ('Title'=>" ",
51 'Height'=> $menucnt+4,
53 # Activate the object.
54 my ($menuItem) = $menu->activate();
57 if (!defined $menuItem) {
61 $data = $items[$menuItem];
64 return($reason,$data);
77 my($left,$top,$msg)=@_;
80 my $output = new Cdk::Label ('Message' =>\@outm,
81 'Ypos'=>$top, 'Xpos'=>$left, 'Box'=>0);
88 my $helptext = output(1,24,$text);
94 my ($env,$title,$title2)=@_;
96 @header[0] = fmtstr($env,$title,"L24");
97 @header[0] = @header[0].fmtstr($env,
98 $env->{'branchname'}."-".$env->{'queue'},"C28");
99 @header[0] = @header[0].fmtstr($env,$title2,"R24");
100 my $label = new Cdk::Label ('Message' =>\@header,'Ypos'=>0,'Xpos'=>0);
106 my ($env,$text1,$text2)=@_;
107 # Create the dialog buttons.
108 my @buttons = ("Yes", "No");
109 my @mesg = ("<C>$text1", "<C>$text2");
110 # Create the dialog object.
111 my $dialog = new Cdk::Dialog ('Message' => \@mesg, 'Buttons' => \@buttons);
112 my $resp = $dialog->activate();
121 my ($env,$text1,$text2)=@_;
123 # Create the dialog buttons.
124 my @buttons = ("No", "Yes");
125 my @mesg = ("<C>$text1", "<C>$text2");
126 # Create the dialog object.
127 my $dialog = new Cdk::Dialog ('Message' => \@mesg, 'Buttons' => \@buttons);
128 my $resp = $dialog->activate();
139 if ($env->{'telnet'} eq "Y") {
140 popupLabel (["Debug </R>$text"]);
142 # print "****DEBUG $text****";
149 popupLabel (["<C>Error </R>$text"]);
155 popupLabel ([$text]);
165 my ($env,$brrecs)=@_;
166 $env->{'sysarea'}="Menu";
167 my $titlebar=titlepanel($env,"Koha","Select branch");
170 while (@$brrecs[$x] ne "") {
171 my $brrec =@$brrecs[$x];
172 $mitems[$x]=fmtstr($env,$brrec->{'branchcode'},"L6");
173 $mitems[$x]=$mitems[$x].fmtstr($env,$brrec->{'branchname'},"L20");
176 my $menu = new Cdk::Scroll ('Title'=>" ",
180 # Activate the object.
181 my ($menuItem) = $menu->activate();
183 if (defined $menuItem) {
184 my $brrec = @$brrecs[$menuItem];
185 $env->{'branchcode'} = $brrec->{'branchcode'};
186 $env->{'branchname'} = $brrec->{'branchname'};
195 my ($env,$prrecs)=@_;
196 $env->{'sysarea'}="Menu";
197 my $titlebar=titlepanel($env,"Koha","Select printer");
200 while (@$prrecs[$x] ne "") {
201 my $prrec =@$prrecs[$x];
202 $mitems[$x]=fmtstr($env,$prrec->{'printername'},"L20");
205 my $menu = new Cdk::Scroll ('Title'=>" ",
209 # Activate the object.
210 my ($menuItem) = $menu->activate();
214 if (defined $menuItem) {
215 my $prrec = @$prrecs[$menuItem];
216 $env->{'queue'} = $prrec->{'printqueue'};
217 $env->{'printtype'} = $prrec->{'printtype'};
224 sub borrower_dialog {
229 my @coltitles = ("Borrower","Item");
230 my @rowtitles = (" ");
231 my @coltypes = ("UMIXED","UMIXED");
232 my @colwidths = (12,12);
233 my $matrix = new Cdk::Matrix (
234 'ColTitles'=> \@coltitles,
235 'RowTitles'=> \@rowtitles,
236 'ColWidths'=> \@colwidths,
237 'ColTypes'=> \@coltypes,
240 borrbind($env,$matrix);
242 my ($rows,$cols,$info) = $matrix->activate();
243 if ((!defined $rows) && ($info->[0][0] eq "")) {
246 $borrower = $info->[0][0];
247 $book = $info->[0][1];
250 $matrix->unregister();
252 Cdk::refreshCdkScreen();
253 return ($borrower,$result,$book);
257 my ($env,$dbh,$borrows,$bornums)=@_;
259 my $label = "Select a borrower";
260 my $scroll = new Cdk::Scroll ('Title'=>$label,
261 'List'=>\@$borrows,'Height'=>15,'Width'=>60);
262 my $returnValue = $scroll->activate ();
263 if (!defined $returnValue) {
266 $result = substr(@$borrows[$returnValue],0,9);
269 #$scroll->unregister();
271 Cdk::refreshCdkScreen();
276 my ($env,$title,$dbh,$items1,$items2,$borrower,$amountowing,$odues)=@_;
277 my @functs=("Due Date","Renewals","Payments","Print","Current","Previous");
278 my $titlepanel = titlepanel($env,"Issues","Issue an Item");
279 my $scroll2 = new Cdk::Scroll ('Title'=>"Previous Issues",
280 'List'=>\@$items1,'Height'=> 8,'Width'=>78,'Ypos'=>18);
281 my $scroll1 = new Cdk::Scroll ('Title'=>"Current Issues",
282 'List'=>\@$items2,'Height'=> 8,'Width'=>78,'Ypos'=>9);
283 my $funcmenu = new Cdk::Scroll ('Title'=>"",
284 'List'=>\@functs,'Height'=>5,'Width'=>12,'Ypos'=>3,'Xpos'=>28);
285 my $loanlength = new Cdk::Entry('Label'=>"Due Date: ",
286 'Max'=>"30",'Width'=>"11",
287 'Xpos'=>0,'Ypos'=>5,'Type'=>"UMIXED");
289 while ($x < length($env->{'loanlength'})) {
290 $loanlength->inject('Input'=>substr($env->{'loanlength'},$x,1));
293 my $borrbox = borrowerbox($env,$borrower,$amountowing);
294 my $entryBox = new Cdk::Entry('Label'=>"Item Barcode: ",
295 'Max'=>"11",'Width'=>"11",
296 'Xpos'=>"0",'Ypos'=>3,'Type'=>"UMIXED");
302 #$env->{'loanlength'} = "";
303 #debug_msg($env,"clear len");
306 $entryBox->preProcess ('Function' =>
307 sub{prebook(@_,$env,$dbh,$funcmenu,$entryBox,$loanlength,
308 $scroll1,$scroll2,$borrower,$amountowing,$odues);});
309 $barcode = $entryBox->activate();
311 if (!defined $barcode) {
312 $reason="Finished user"
319 $loanlength->erase();
327 Cdk::refreshCdkScreen();
328 #debug_msg($env,"exiting");
329 return $barcode,$reason;
332 my ($env,$dbh,$funcmenu,$entryBox,$loanlength,$scroll1,
333 $scroll2,$borrower,$amountowing,$odues) = @_;
334 my $funct = $funcmenu->activate();
335 if (!defined $funct) {
336 } elsif ($funct == 0 ) {
337 actloanlength ($env,$entryBox,$loanlength,$scroll1,$scroll2);
338 } elsif ($funct == 1 ) {
342 $loanlength->erase();
345 C4::Circulation::Renewals::bulkrenew($env,$dbh,
346 $borrower->{'borrowernumber'},$amountowing,$borrower,$odues);
347 } elsif ($funct == 2 ) {
351 $loanlength->erase();
353 C4::Accounts::reconcileaccount($env,$dbh,$borrower->{'borrowernumber'},
354 $amountowing,$borrower,$odues);
355 } elsif ($funct == 3 ) {
356 C4::Circulation::Borrissues::printallissues ($env,$borrower);
357 } elsif ($funct == 4 ) {
358 actscroll1 ($env,$entryBox,$loanlength,$scroll1,$scroll2);
359 } elsif ($funct == 5 ) {
360 actscroll2 ($env,$entryBox,$loanlength,$scroll1,$scroll2);
362 Cdk::refreshCdkScreen();
363 $entryBox->unregister();
364 $entryBox->register();
368 my ($env,$entryBox,$loanlength,$scroll1,$scroll2) = @_;
369 $scroll1->activate();
373 my ($env,$entryBox,$loanlength,$scroll1,$scroll2) = @_;
374 $scroll2->activate();
378 my ($env,$entryBox,$loanlength,$scroll1,$scroll2) = @_;
380 while ($validdate eq "N") {
381 my $loanlength = $loanlength->activate();
382 if (!defined $loanlength) {
383 $env->{'loanlength'} = "";
385 } elsif ($loanlength eq "") {
386 $env->{'loanlength'} = "";
389 my $date = ParseDate($loanlength);
390 if ( $date > ParseDate('today')){
392 my $fdate = substr($date,0,4).'-'.substr($date,4,2).'-'.substr($date,6,2);
393 #debug_msg($env,"$date $fdate");
394 $env->{'loanlength'} = $fdate;
396 error_msg($env,"Invalid date");
404 my ($input,$env,$dbh,$funcmenu,$entryBox,$loanlength,
405 $scroll1,$scroll2,$borrower,$amountowing,$odues)= @_;
406 if ($input eq $key_tab) {
407 actfmenu ($env,$dbh,$funcmenu,$entryBox,$loanlength,$scroll1,
408 $scroll2,$borrower,$amountowing,$odues);
415 my ($env,$borrower,$amountowing,$odues) = @_;
417 my $amountowing = fmtdec($env,$amountowing,"42");
418 my $line = "$borrower->{'cardnumber'} ";
419 $line = $line."$borrower->{'surname'}, ";
420 $line = $line."$borrower->{'title'} $borrower->{'firstname'}";
422 $line = "$borrower->{'streetaddress'}, $borrower->{'city'}";
424 $line = "$borrower->{'categorycode'}";
425 if ($borrower->{'gonenoaddress'} == 1) {
426 $line = $line." </R>GNA<!R>";
428 if ($borrower->{'lost'} == 1) {
429 $line = $line." </R>LOST<!R>";
432 $line = $line." </R>ODUE<!R>";
434 if ($borrower->{'borrowernotes'} ne "" ) {
435 $line = $line." </R>NOTES<!R>";
437 if ($amountowing > 0) {
438 $line = $line." </B>\$$amountowing";
441 if ($borrower->{'borrowernotes'} ne "" ) {
442 $borrinfo[3]=substr($borrower->{'borrowernotes'},0,40);
444 my $borrbox = new Cdk::Label ('Message' =>\@borrinfo,
445 'Ypos'=>3, 'Xpos'=>"RIGHT");
450 my ($env,$title,$item,$items,$borrower,$amountowing,$odues,$dbh,$resp)=@_;
451 #debug_msg($env,$borrower);
452 my $titlepanel = titlepanel($env,"Returns","Scan Item");
453 my @functs=("Payments","Renewal");
454 my $funcmenu = new Cdk::Scroll ('Title'=>"",
455 'List'=>\@functs,'Height'=>5,'Width'=>12,'Ypos'=>3,'Xpos'=>16);
456 my $returnlist = new Cdk::Scroll ('Title'=>"Items Returned",
457 'List'=>\@$items,'Height'=> 12,'Width'=>74,'Ypos'=>10,'Xpos'=>1);
461 if ($borrower->{'cardnumber'} ne "") {
462 $borrbox = borrowerbox($env,$borrower,$amountowing);
468 $borrbox = new Cdk::Label ('Message' =>\@text, 'Ypos'=>3, 'Xpos'=>"RIGHT");
472 my $bookentry = new Cdk::Entry('Label'=>" ",
473 'Max'=>"11",'Width'=>"11",
474 'Xpos'=>"2",'Ypos'=>"3",'Title'=>"Item Barcode",
476 $bookentry->preProcess ('Function' =>sub{preretbook(@_,$env,$dbh,
477 $funcmenu,$bookentry,$borrower,$amountowing,
478 $odues,$titlepanel,$borrbox,$returnlist);});
479 my $barcode = $bookentry->activate();
481 if (!defined $barcode) {
486 if ($borrbox ne "") {$borrbox->erase();}
487 $returnlist->erase();
496 return($reason,$barcode);
500 my ($input,$env,$dbh,$funcmenu,$bookentry,$borrower,
501 $amountowing,$odues,$titlepanel,$borrbox,$returnlist)=@_;
502 if ($input eq $key_tab) {
503 actrfmenu($env,$dbh,$funcmenu,$bookentry,$borrower,
504 $amountowing,$odues,$titlepanel,$borrbox,$returnlist);
511 my ($env,$dbh,$funcmenu,$bookentry,$borrower,
512 $amountowing,$odues,$titlepanel,$borrbox,$returnlist)= @_;
513 my $funct = $funcmenu->activate();
514 #debug_msg($env,"funtion $funct");
515 if (!defined $funct) {
516 } elsif ($funct == 1 ) {
517 if ($borrower->{'borrowernumber'} ne "") {
520 $titlepanel->erase();
522 $returnlist->erase();
523 C4::Circulation::Renewals::bulkrenew($env,$dbh,
524 $borrower->{'borrowernumber'},$amountowing,$borrower,$odues);
525 Cdk::refreshCdkScreen();
532 } elsif ($funct == 0 ) {
533 if ($borrower->{'borrowernumber'} ne "") {
536 $titlepanel->erase();
538 $returnlist->erase();
539 C4::Accounts::reconcileaccount($env,$dbh,$borrower->{'borrowernumber'},
540 $amountowing,$borrower,$odues);
546 #Cdk::refreshCdkScreen();
553 my $ans = $obj->activate();
558 my ($env,$entry) = @_;
559 my $lastborr = $env->{"bcard"};
560 $entry->preProcess ('Function' => sub {preborr (@_, $env,$entry);});
564 my ($input,$env, $entry) = @_;
565 if ($env->{"bcard"} ne "") {
566 # error_msg($env,"hi there");
567 if ($input eq $lastval) {
568 # error_msg($env,"its a ctrl-r");
569 borfill($env,$entry);
578 my ($env,$entry) = @_;
579 error_msg($env,"in borfill: $env->{'bcard'}");
580 my $lastborr = $env->{"bcard"};
582 $entry->inject('Input'=>$lastborr);
584 # my $temp=substr($lastborr,$i,1);
585 # $entry->inject('Input'=>$temp);
591 END { } # module clean-up code here (global destructor)