厨房、ドリンクへの別々のオーダー印刷

※ソース内は適時変更、翻訳してご利用ください。

1) 商品情報を編集します

管理の在庫メニューからメンテナンスの製品を選択し、それぞれの製品毎に下記の設定を行います。

厨房側のプリンターで印刷したい商品のプロパティに、

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "https://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="printkb">Kitchen</entry>
<entry key="sendstatus">No</entry>
</properties>

ドリンク側のプリンターで印刷したい商品のプロパティに、

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "https://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="printkb">Bar</entry>
<entry key="sendstatus">No</entry>
</properties>

と記載します。

2) Ticket.Buttons のリソースを追加します

管理のメンテナンスからPOSのリソースを選択し、Ticket.Buttonsを選択します。

<configuration>~</configuration>の中のどこでもいいので、下記を追加します。

<button key="button.sendorder" name="button.sendorder" code="Script.SendOrder"/>
<event key="ticket.addline" code="event.addline"/>
<event key="ticket.removeline" code="event.removeline"/>
<event key="ticket.setline" code="event.setline"/>
<event key="ticket.total" code="event.total"/>

3) Ticket.Line のリソースを追加します

管理のメンテナンスからPOSのリソースを選択し、Ticket.Lineを選択します。

</line>の前の行辺りに下記を追加します。

<column name="label.sendorder" width="5" align="left" value="${ticketline.getProperty('printkb','??')}"/>
<column name="label.sendstatus" width="5" align="left" value="${ticketline.getProperty('sendstatus','??')}"/>

4) ボタンの名前と、カラムの名前を追加します

pcposをインストールしたフォルダ(windowsではProgram Filesの中だったりします) の中より locales フォルダを探し、その中の pos_messages_ja.properties が編集対象ファイルです。

下記を追加します。

button.sendorder=オーダー印刷
label.sendorder=状態
label.sendstatus=オーダー印刷

尚、このファイルはUTF-16ですので、UTF-16にエンコードしてください。

上記の通りであれば、下記のようになります。

button.sendorder=u30aau30fcu30c0u30fcu5370u5237
label.sendorder=u72b6u614b
label.sendstatus=u30aau30fcu30c0u30fcu5370u5237

NetBeansなどでは、編集すると、自動的にUTF-16にエンコードされますので、その後コンパイルしなおして、インストールしなおしてください。

5) 送信ボタンに権限を与えます

管理のメンテナンスからPOSのロールを選択し、送信ボタンを押してもいい権限を与えるグループに下記を追加します。

追加する場所は、<permissions>~</permissions>の間であれば、どこでも問題ありません。

<class name="button.sendorder"/>

6) オーダー印刷のスクリプトを追加します

管理のメンテナンスからPOSのリソースにて、新規作成ボタン(上部のボタンのうち右から三つ目のボタンを押し、Script.SendOrder と入力して、 下の大きな空白に下記のソースを貼り付けます。

// Print an order ticket to the Kitchen & BarDessert

boolean kitchen = false;
boolean bar = false;
boolean change_kitchen = false;
boolean change_bar = false;
for(int i= 0; i < ticket.getLinesCount(); i++){
 line = ticket.getLine(i);
// Set Discount(printkb=NULL) to N/A so it does not error on next section.
 if (line.getProperty("printkb") == null){
 line.setProperty("printkb", "N/A");
 }
 if (line.getProperty("sendstatus") == null){
 line.setProperty("sendstatus", "No");
 }
 if((line.getProperty("printkb").equals("Kitchen")) && (line.getProperty("sendstatus").equals("No"))){
 kitchen = true; //There is something to print to kitchen
 }else if ((line.getProperty("printkb").equals("Bar")) && (line.getProperty("sendstatus").equals("No"))){
 bar = true; //There is something to print to bar
 }else if ((line.getProperty("printkb").equals("Kitchen")) && (line.getProperty("sendstatus").equals("Cancel"))){
 change_kitchen = true; //There is something to change for kitchen
 }else if ((line.getProperty("printkb").equals("Bar")) && (line.getProperty("sendstatus").equals("Cancel"))){
 change_bar = true; //There is something to change for bar
 }
}

if ((change_kitchen && kitchen) || (change_kitchen && !kitchen)) {
sales.printTicket("Printer.TicketChange_Kitchen"); //Print changed kitchen items to kitchen printer
}
if ((change_bar && bar) || (change_bar && !bar)) {
sales.printTicket("Printer.TicketChange_Bar"); //Print changed bar items to bar printer
}
if (kitchen && !change_kitchen) {
sales.printTicket("Printer.TicketKitchen"); //Print kitchen items to kitchen printer
}
if (bar && !change_bar) {
sales.printTicket("Printer.TicketBar"); //Print bar items to bar printer
}

//Show a nice message for confirmation
if (kitchen && bar){
javax.swing.JOptionPane.showMessageDialog(null, "Your order has been sent to the Kitchen & Bar.");
} else if (kitchen && !bar){
javax.swing.JOptionPane.showMessageDialog(null, "Your order has been sent to the Kitchen only.");
} else if (!kitchen && bar){
javax.swing.JOptionPane.showMessageDialog(null, "Your order has been sent to the Bar only.");
} else if (change_kitchen || change_bar){
javax.swing.JOptionPane.showMessageDialog(null, "Your cancelled items have been sent.");
} else {
javax.swing.JOptionPane.showMessageDialog(null, "There is nothing new to send.", "Print Warning", JOptionPane.WARNING_MESSAGE);
}

//Set printkb property of item to Yes so it is not printed again
for(int i = ticket.getLinesCount()-1; i>= 0 ; i--){

 line = ticket.getLine(i);
 String a = line.getProperty("sendstatus");
 String b = "Cancel";

 if(((line.getProperty("printkb").equals("Kitchen")) || (line.getProperty("printkb").equals("Bar"))) && (line.getProperty("sendstatus").equals("No"))){
 line.setProperty("sendstatus", "Yes");
 }

 //Remove cancelled lines
 if (a.equals(b)) {
 ticket.removeLine(i);
 }
}

7) event.addline のリソースを追加します

管理のメンテナンスからPOSのリソースにて、新規作成ボタン(上部のボタンのうち右から三つ目のボタンを押し、event.addline と入力して、 下の大きな空白に下記のソースを貼り付けます。

//Remove nulls for unknown products


if (line.getProperty("printkb") == null){
line.setProperty("printkb", "N/A");
}

//No need to send unknown products anywhere

if (line.getProperty("sendstatus") == null){
line.setProperty("sendstatus", "Yes");
}

8) event.removeline のリソースを追加します

管理のメンテナンスからPOSのリソースにて、新規作成ボタン(上部のボタンのうち右から三つ目のボタンを押し、event.removeline と入力して、 下の大きな空白に下記のソースを貼り付けます。

// Set SendStatus and print removals


line = ticket.getLine(index);


//Remove nulls for unknown products
if (line.getProperty("printkb") == null){
 line.setProperty("printkb", "N/A");
}

//No need to send unknown products anywhere
if (line.getProperty("sendstatus") == null){
 line.setProperty("sendstatus", "No");
}

String a = line.getProperty("sendstatus");
String b = "Yes";
String c = "No";
Integer myCount = 0;
//get count of auxiliar after the main product
for (i = index+1; i < ticket.getLinesCount(); i++) {
 if (ticket.getLine(i).isProductCom()){
 myCount = myCount + 1;
 }else{
 break;
 }
}

//Set SendStatus of sent items to Cancel
if (a.equals(b) && !line.isProductCom()) {
 for (i = index + myCount; i>= index ; i--) {
  if (ticket.getLine(i).isProductCom() && ticket.getLine(i).getProperty("sendstatus").equals("Yes")){
  ticket.getLine(i).setProperty("sendstatus", "Cancel");
  }else if (ticket.getLine(i).isProductCom() && ticket.getLine(i).getProperty("sendstatus").equals("No")){
  ticket.removeLine(i);
  }else{
  break;
  }
 }
line.setProperty("sendstatus", "Cancel");
}

//Removelines of NOT sent items
if (a.equals(c) && !line.isProductCom()) {
 for (i = index + myCount; i>= index ; i--) {
  if (ticket.getLine(i).isProductCom()){
  ticket.removeLine(i);
  }else{
  break;
  }
 }
ticket.removeLine(index);
}else if (a.equals(c) && line.isProductCom()) {
ticket.removeLine(index);
}

//Cancel event
removeLine.cancel=true;

9) event.setline のリソースを追加します

管理のメンテナンスからPOSのリソースにて、新規作成ボタン(上部のボタンのうち右から三つ目のボタンを押し、event.setline と入力して、 下の大きな空白に下記のソースを貼り付けます。

// Set Discount(printkb=NULL) to N/A so it does not error on next section.
if (line.getProperty("printkb") == null){
line.setProperty("printkb", "N/A");
}
if (line.getProperty("sendstatus") == null){
line.setProperty("sendstatus", "No");
}

//Stop the line modification of sent products
if (!line.getProperty("sendstatus").equals("No")){
JOptionPane.showMessageDialog(null,
   "You cannot modify a sent item.",
   "Error",
   JOptionPane.ERROR_MESSAGE);
}else{
ticket.setLine(index, line);
}
cancel=true;

10) event.total のリソースを追加します

管理のメンテナンスからPOSのリソースにて、新規作成ボタン(上部のボタンのうち右から三つ目のボタンを押し、event.total と入力して、 下の大きな空白に下記のソースを貼り付けます。

//Stop payment when all items not sent


for(int i= 0; i < ticket.getLinesCount(); i++){
 line = ticket.getLine(i);

// Set Discount(printkb=NULL) to N/A so it does not error on next section.
 if (line.getProperty("printkb") == null){
 line.setProperty("printkb", "N/A");
 }
 if (line.getProperty("sendstatus") == null){
 line.setProperty("sendstatus", "No");
 }

 if(line.getProperty("sendstatus").equals("No") || line.getProperty("sendstatus").equals("Cancel")){
 mySent = "No";
 }
}

if (mySent == "No"){
javax.swing.JOptionPane.showMessageDialog(null, "You must Send all items to Kitchen and/or bar before payment", "Send Warning", JOptionPane.WARNING_MESSAGE);
return "Cancel";
}else{
return null;
}

11) 厨房用とドリンク用のチケットを作成します

管理のメンテナンスからPOSのリソースにて、新規作成ボタン(上部のボタンのうち右から三つ目のボタンを押し、Printer.TicketKitchen と入力して、 下の大きな空白に下記のソースを貼り付けます。

同様にPrinter.TicketBarも、Kitchen と記載してあるところを、Bar に変更し、作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Openbravo POS is a point of sales application designed for touch screens.
 Copyright (C) 2008 Openbravo, S.L.U.
 https://sourceforge.net/projects/openbravopos

 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-->
<output>

<display>
<line>
<text align="left" length="10">Order sent to Kitchen</text>
<text align="right" length="10">${ticket.printTotal()}</text>
</line>
<line>
<text align="center" length="20">Thank you.</text>
</line>
</display>

<ticket printer = "2">
<line></line>
<line></line>
<line>
<text align="center" length="42">Kitchen Order</text>
</line>
<line></line>
<line>
<text align="left" length="15">Receipt:</text>
<text>${ticket.printId()}</text>
</line>
<line>
<text align="left" length="15">Date:</text>
<text>${ticket.printDate()}</text>
</line>
#if ($ticket.getCustomer())
<line>
<text align="left" length="15">Customer:</text>
<text>${ticket.getCustomer().getName()}</text>
</line>
<line>
<text align="left" length="15"></text>
<text>${ticket.getCustomer().getTaxid()}</text>
</line>
#end

#if ($place != "")
<line>
<text align="left" length="15">Table:</text>
<text>${place}</text>
</line>
#end
<line></line>
<line>
<text align ="left" length="17">Item</text>
<text align ="right" length="5"></text>
</line>
<line>
<text>------------------------------------------</text>
</line>
#foreach ($ticketline in $ticket.getLines())
#if (($ticketline.getProperty("printkb").equals("Kitchen")) && ($ticketline.getProperty("sendstatus").equals("No")))
<line>
<text align ="left" length="5" bold="true">${ticketline.printMultiply()}x</text>
#if ($ticketline.isProductCom())
<text align ="left" length="37">--${ticketline.printName()}</text>
#else
<text align ="left" length="37" bold="true">${ticketline.printName()}</text>
#end
</line>
#end
<!-- Add the following lines only for 2.30 Attributes -->
#if ($ticketline.productAttSetInstId)
<line>
<text align ="left" length="42">
${ticketline.productAttSetInstDesc}</text>
</line>
#end
<!-- Add the previous lines only for 2.30 Attributes -->
#end
<line>
<text>------------------------------------------</text>
</line>
<line>
<text align="left" length="15">Cashier:</text>
<text>${ticket.printUser()}</text>
</line>
</ticket>
</output>

上記同様に Printer.TicketChange_Kitchen と Printer.TicketChange_Bar を作成します。KitchenBar は入れ替えて作成してください。

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Openbravo POS is a point of sales application designed for touch screens.
 Copyright (C) 2008 Openbravo, S.L.U.
 https://sourceforge.net/projects/openbravopos

 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

 Ticket for changing a Sent Kitchen Order
-->
<output>

<display>
<line>
<text align="left" length="10">Change Sent</text>
<text align="right" length="10">${ticket.printTotal()}</text>
</line>
<line>
<text align="center" length="20">Thank you.</text>
</line>
</display>

<ticket printer = "2">
<line></line>
<line></line>
<line size="1">
<text align="center" length="42" bold="true">Changed Kitchen Items</text>
</line>
<line></line>
<line>
<text align="left" length="15">Receipt:</text>
<text>${ticket.printId()}</text>
</line>
<line>
<text align="left" length="15">Date:</text>
<text>${ticket.printDate()}</text>
</line>
#if ($ticket.getCustomer())
<line>
<text align="left" length="15">Customer:</text>
<text>${ticket.getCustomer().getName()}</text>
</line>
<line>
<text align="left" length="15"></text>
<text>${ticket.getCustomer().getTaxid()}</text>
</line>
#end
#if ($place != "")
<line>
<text align="left" length="15">Table:</text>
<text>${place}</text>
</line>
#end
<line></line>
<line>
<text align ="left" length="17">Item</text>
<text align ="right" length="5"></text>
</line>
<line>
<text>------------------------------------------</text>
</line>
#foreach ($ticketline in $ticket.getLines())
#if (($ticketline.getProperty("printkb").equals("Kitchen") && $ticketline.getProperty("sendstatus").equals("Cancel"))||($ticketline.getProperty("printkb").equals("Kitchen") && $ticketline.getProperty("sendstatus").equals("No")))
<line>   #if ($ticketline.getProperty("sendstatus").equals("No"))
<text align ="left" length="7" bold="true">Add</text>
#else
<text align ="left" length="7" bold="true">${ticketline.getProperty("sendstatus")}</text>
#end
<text align ="left" length="5" bold="true">${ticketline.printMultiply()}x</text>
#if ($ticketline.isProductCom())
<text align ="left" length="30">--${ticketline.printName()}</text>
#else
<text align ="left" length="30" bold="true">${ticketline.printName()}</text>
#end
</line>
<!-- Add the following lines only for 2.30 Attributes -->
#if ($ticketline.productAttSetInstId)
<line>
<text align ="left" length="42">
${ticketline.productAttSetInstDesc}</text>
</line>
#end
<!-- Add the previous lines only for 2.30 Attributes -->
#end
#end
<line>
<text>------------------------------------------</text>
</line>
</ticket>
</output>

厨房用にプリンター2が設定されていて、ドリンクにプリンター3が設定されている場合などは、<ticket printer = "2">の部分を適時、<ticket printer = "3">と変えてください。

逆の場合も同様に変更してください。

レジにレシートプリンターが1台、厨房に1台、ドリンクに1台あると、別々に印刷することが可能です。


PC-POS JP – オープンソースPCポスレジシステム
© 2012-2024 Obitastar Co.,Ltd. Powered by Zen Cart / zen-cart.jp
TOP