Skip to content

feat: 検品レポート PDF とレポートのメール共有(iOS / Android) - #131

Merged
rimtty merged 18 commits into
masterfrom
codex/inspection-report-mail
Sep 10, 2026
Merged

rimtty merged 18 commits into
masterfrom
codex/inspection-report-mail

Conversation

@rimtty

@rimtty rimtty commented Sep 10, 2026

Copy link
Copy Markdown
Owner

概要

セッション詳細に第2のPDF「検品レポート」を追加し、あわせて2つのPDFの「共有する」を宛先・件名・本文・添付を埋めたメール作成画面の起動に変えた(iOS / Android 両方)。紙の検品表(品番・箱数の一覧)との突き合わせを速くするための変更で、既存の照合履歴レポートPDFの内容と「PDFで保存」はそのまま。

検品レポート PDF

  • A4縦の1つの表。見出しは開始・終了(照合中なら状態)、仕向地、検査箱数、行数。表ヘッダーは各ページに繰り返し、右下に n / N、脚注に「検品表にあってこの一覧にない品番は、このセッションで照合されていません。」。
  • 澤井製作所: 1行 = 品番+枝番。品番は検品表と同じハイフンなしの生の値、枝番があるときだけ BCJH5281GG (02)。列は No・品番・箱数・納入数量/箱・数量計・確認(手書き用の空の四角)。行数の見出しは「品番数(枝番別)」。
  • モルテン: 1行 = 納品番号。列は No・納品番号・品番(生の値)・納入先・箱数・収容数/箱・累計・確認。並びは品番 → 納品番号で、同じ品番の行が離れない。見出しは「納品番号数」。
  • デンソー: 1行 = 品番(6-4)。列は No・品番・箱数・収容数/箱・数量計・確認。指示数は出さない。見出しは「品番数」。
  • 並び順は品番の昇順。仕向地として解析できないQRの箱(旧履歴)は品番をキーにした行として末尾に残し、行の箱数の合計は常にセッションの箱数と一致する。品名・不足数・完了判定は出さない。
  • セッション詳細は「検品レポート」の保存・共有の行を上に、「照合履歴レポート」の行をその下に置き、それぞれにキャプションを付けた(saveInspectionReportButton / shareInspectionReportButton、既存の savePDFButton / sharePDFButton は維持)。

レポートのメール共有

  • 「共有する」(両レポート)は、宛先 takemoto1075@icloud.com、件名 <レポート名> <開始日時> - <仕向地>、定型本文(レポート名の一文、セッション名・開始・終了または状態・仕向地・検査箱数・行数、添付ファイル名)、PDF添付を埋めたメール作成画面を開く。送信は操作者が行い、アプリ自身は通信しない。本文に読取値の全文は載せない。
  • iOS は MFMailComposeViewController(「メール」にアカウントがなければ従来の共有シート)。Android は ACTION_SEND + mailto: セレクタでメールアプリだけに渡し、複数あればOSの選択で固定できる。メールアプリがなければ従来の共有チューザー。AndroidManifest.xmlmailto:<queries> を追加。
  • 両レポートのファイル名は <レポート名>_<仕向地>_<開始日時>.pdf(例 検品レポート_澤井製作所_2026-09-07_2317.pdf)。保存時も同じ。仕向地のない旧履歴では仕向地を省く。

実装

  • iOS: Models/InspectionReport.swift(純粋な行モデル)、Services/PDFPageWriter.swift(表の行・ヘッダー再描画・フッターを持つ描画カーソル。SessionPDFExporter もこれに載せ替え、出力は不変)、Services/InspectionPDFExporter.swift(ページ総数のため2回描画)、Services/ReportMailContent.swiftServices/MailComposeView.swiftLocalizable.xcstrings に ja/en を追加。CURRENT_PROJECT_VERSION は 10(App Store Connect に 9 が既にあるため)。
  • Android: core/exportInspectionReportContent / PdfTable / InspectionPdfContent / ReportMailContent(純 JVM)、HistoryPdfExporterHistoryReportKind と private PageCursorFile( を作るのは従来どおりこのファイルだけ、cache も codematch-pdf/ のまま。release gate は無変更で通過)。HistoryPdfBridge / HistoryRoutekind とメール Intent、HistoryScreenPdfActionRowhistory_inspection_report / history_match_history_report を日英へ追加。
  • ドキュメント: docs/PRODUCT_SPEC.md(検品レポート、レポートのメール共有)、docs/android/TEST_PARITY.mddocs/android/STATUS.mddocs/ios/IMPLEMENTATION_GUIDE.md

テスト

  • iOS: InspectionReportTests(7)、InspectionPDFExporterTests(6、PDFKit抽出テキスト。複数ページのヘッダー繰り返しとページ番号を含む)、ReportMailContentTests(3)。SessionPDFExporterTests は無変更で通る。全 simulator suite(英語ロケール)成功。
  • Android: InspectionReportContentTest(7)、InspectionPdfContentTest(6)、ReportMailContentTest(3)、HistoryExportTextTest / HistoryPdfBridgeTest の追加分、HistoryPdfExporterInstrumentationTest の検品レポート2件、HistoryFontScaleAccessibilityTest / HistoryScreenTest の新ボタン。lintDebug testDebugUnitTest assembleDebug:app:assembleRelease + verify-release-hardening.sh、Pixel_7 emulator の instrumentation が成功。
  • 実機: Pixel 7(release APK)と iPhone 16 Pro Max で、澤井製作所・モルテン・デンソーの実セッションから検品レポートを出力し、紙の検品表と突き合わせて確認済み。メール作成画面の起動と添付も確認済み。

🤖 Generated with Claude Code

@rimtty
rimtty merged commit 9373de2 into master Sep 10, 2026
7 of 8 checks passed
@rimtty
rimtty deleted the codex/inspection-report-mail branch September 10, 2026 17:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant