私はレストラン POS (Samba pos) のソース コードに取り組んでおり、チケットを印刷するときに出力がどのようにフォーマットされるかについて 2 つの問題があります。
以下のコードは、製品のタグを収集し、それらのヘッダーを作成し、ヘッダーの下に製品を並べ替えます。
問題 1: ヘッダーの順序に影響がないため、出力は次のようになります。
メインコース
ステーキ 22,50
飲み物
コーラ 2,00
スターター
スープ 3,50
正しい順序は、スターター --> メイン コース --> デザート --> ドリンク です。ヘッダーをアルファベット順に並べ替えることができれば、非常に助かります。グループタグを次のように変更します:1スターター、2メインコースなど
問題 2:
製品は、プログラムの初期段階でグループ化されます。プログラマーの選択により、グループ化がうまく機能しません。チケットには次のような長いリストがあります。
1×コーラ 2,00
2×コーラ 4,00
ここで製品をグループ化して、次のようにする方法はありますか?
3×コーラ 6,00
コードの一部は次のとおりです。
if (template.GroupTemplate.Contains("{PRODUCT TAG}"))
{
var groups = lines.GroupBy(GetMenuItemTag);
var result = new List<string>();
foreach (var grp in groups)
{
var grpSep = template.GroupTemplate.Replace("{PRODUCT TAG}", grp.Key);
result.AddRange(grpSep.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
result.AddRange(grp.SelectMany(x => FormatLines(template, x).Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)));
}
return result;
}
ソートする必要がありますvar groups
。grp.Key
問題は、テキスト {PRODUCT TAG} がループ内で置き換えられることです。そのためvar groups
、ループの前の順序付けはおそらく機能しません (余分なループが必要ですか?)。
ヘッダーへの製品の追加は、ループの 3 行で行われます。ここでアイテムをグループ化することはできますか?
ここにファイル全体をダンプしました: http://pastebin.com/qFr5wN28
編集:
このコードは、チケットプリンターでチケットを作成するためのものです。チケットは次のようになります。
BON
Datum: 2-2-2013
Tijd: 18:35
Tafel nr.: B22
Bon nr: 2
------------------------------------------
Breakfast
- 1 Toast and Jam 1,50
- 1 Egg, Bacon Cheese 3,99
- 1 Toasted Bagel Cheese 2,25
- 1 Toasted Bagel Jam 1,50
- 2 Toast and Jam 1,50
- 1 Egg, Bacon Cheese 3,99
- 1 Bacon and Cheese 3,49
- 1 Bacon and Tomato 3,49
Deserts
- 1 Rice Pudding 2,25
- 1 Fruit Danish 1,50
Main course
- 1 Chicken Garden Wrap 5,25
- 1 Chicken Caesar Wrap 5,75
- 1 Canadian Wrap 6,99
- 1 Chicken Greek Wrap 6,99
ヘッダーは、製品に追加できるタグです。いくつか問題があります。記事の上のヘッダー (デザート、メイン コース) がランダムに表示されます。それらを並べたいと思います。「トーストとジャム」など、すべての記事がグループ化されているわけではありません。ヘッダーを並べ替えることができれば、タグを少し変更します。望ましい出力は次のようになります。
------------------------------------------
1 Breakfast
- 3 Toast and Jam 1,50
- 2 Egg, Bacon Cheese 3,99
- 1 Toasted Bagel Cheese 2,25
- 1 Toasted Bagel Jam 1,50
- 1 Bacon and Cheese 3,49
- 1 Bacon and Tomato 3,49
2 Main course
- 1 Chicken Garden Wrap 5,25
- 1 Chicken Caesar Wrap 5,75
- 1 Canadian Wrap 6,99
- 1 Chicken Greek Wrap 6,99
3 Deserts
- 1 Rice Pudding 2,25
- 1 Fruit Danish 1,50