|
@@ -284,8 +284,8 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage> {
|
|
|
const SizedBox(height: 16),
|
|
const SizedBox(height: 16),
|
|
|
FormFieldRow(
|
|
FormFieldRow(
|
|
|
label: l10n.get('expensePersonnel'),
|
|
label: l10n.get('expensePersonnel'),
|
|
|
- value: expense.applicantName.isNotEmpty
|
|
|
|
|
- ? '${expense.applicantId}/${expense.applicantName}'
|
|
|
|
|
|
|
+ value: expense.applicantId.isNotEmpty
|
|
|
|
|
+ ? '${expense.applicantId}${expense.applicantName.isNotEmpty ? '/${expense.applicantName}' : ''}'
|
|
|
: '-',
|
|
: '-',
|
|
|
readOnly: true,
|
|
readOnly: true,
|
|
|
showArrow: false,
|
|
showArrow: false,
|
|
@@ -293,8 +293,8 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage> {
|
|
|
const SizedBox(height: 16),
|
|
const SizedBox(height: 16),
|
|
|
FormFieldRow(
|
|
FormFieldRow(
|
|
|
label: l10n.get('expenseDept'),
|
|
label: l10n.get('expenseDept'),
|
|
|
- value: expense.deptName.isNotEmpty
|
|
|
|
|
- ? '${expense.deptId}/${expense.deptName}'
|
|
|
|
|
|
|
+ value: expense.deptId.isNotEmpty
|
|
|
|
|
+ ? '${expense.deptId}${expense.deptName.isNotEmpty ? '/${expense.deptName}' : ''}'
|
|
|
: '-',
|
|
: '-',
|
|
|
readOnly: true,
|
|
readOnly: true,
|
|
|
showArrow: false,
|
|
showArrow: false,
|
|
@@ -471,9 +471,9 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage> {
|
|
|
color: colors.textSecondary,
|
|
color: colors.textSecondary,
|
|
|
),
|
|
),
|
|
|
),
|
|
),
|
|
|
- if (d.acctSubjectName.isNotEmpty)
|
|
|
|
|
|
|
+ if (d.acctSubjectId.isNotEmpty)
|
|
|
Text(
|
|
Text(
|
|
|
- '${l10n.get('acctSubject')}: ${d.acctSubjectId}/${d.acctSubjectName}',
|
|
|
|
|
|
|
+ '${l10n.get('acctSubject')}: ${d.acctSubjectId}${d.acctSubjectName.isNotEmpty ? '/${d.acctSubjectName}' : ''}',
|
|
|
maxLines: 1,
|
|
maxLines: 1,
|
|
|
overflow: TextOverflow.ellipsis,
|
|
overflow: TextOverflow.ellipsis,
|
|
|
style: TextStyle(
|
|
style: TextStyle(
|
|
@@ -499,9 +499,9 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage> {
|
|
|
color: colors.textSecondary,
|
|
color: colors.textSecondary,
|
|
|
),
|
|
),
|
|
|
),
|
|
),
|
|
|
- if (d.projectName.isNotEmpty)
|
|
|
|
|
|
|
+ if (d.projectId.isNotEmpty)
|
|
|
Text(
|
|
Text(
|
|
|
- '${l10n.get('project')}: ${d.projectId}/${d.projectName}',
|
|
|
|
|
|
|
+ '${l10n.get('project')}: ${d.projectId}${d.projectName.isNotEmpty ? '/${d.projectName}' : ''}',
|
|
|
maxLines: 1,
|
|
maxLines: 1,
|
|
|
overflow: TextOverflow.ellipsis,
|
|
overflow: TextOverflow.ellipsis,
|
|
|
style: TextStyle(
|
|
style: TextStyle(
|
|
@@ -509,9 +509,9 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage> {
|
|
|
color: colors.textSecondary,
|
|
color: colors.textSecondary,
|
|
|
),
|
|
),
|
|
|
),
|
|
),
|
|
|
- if (d.costDeptName.isNotEmpty)
|
|
|
|
|
|
|
+ if (d.costDeptId.isNotEmpty)
|
|
|
Text(
|
|
Text(
|
|
|
- '${l10n.get('costDept')}: ${d.costDeptId}/${d.costDeptName}',
|
|
|
|
|
|
|
+ '${l10n.get('costDept')}: ${d.costDeptId}${d.costDeptName.isNotEmpty ? '/${d.costDeptName}' : ''}',
|
|
|
maxLines: 1,
|
|
maxLines: 1,
|
|
|
overflow: TextOverflow.ellipsis,
|
|
overflow: TextOverflow.ellipsis,
|
|
|
style: TextStyle(
|
|
style: TextStyle(
|
|
@@ -519,9 +519,9 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage> {
|
|
|
color: colors.textSecondary,
|
|
color: colors.textSecondary,
|
|
|
),
|
|
),
|
|
|
),
|
|
),
|
|
|
- if (d.customerVendorName.isNotEmpty)
|
|
|
|
|
|
|
+ if (d.customerVendorId.isNotEmpty)
|
|
|
Text(
|
|
Text(
|
|
|
- '${l10n.get('customerVendor')}: ${d.customerVendorId}/${d.customerVendorName}',
|
|
|
|
|
|
|
+ '${l10n.get('customerVendor')}: ${d.customerVendorId}${d.customerVendorName.isNotEmpty ? '/${d.customerVendorName}' : ''}',
|
|
|
maxLines: 1,
|
|
maxLines: 1,
|
|
|
overflow: TextOverflow.ellipsis,
|
|
overflow: TextOverflow.ellipsis,
|
|
|
style: TextStyle(
|
|
style: TextStyle(
|
|
@@ -529,9 +529,9 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage> {
|
|
|
color: colors.textSecondary,
|
|
color: colors.textSecondary,
|
|
|
),
|
|
),
|
|
|
),
|
|
),
|
|
|
- if (d.sqManName.isNotEmpty)
|
|
|
|
|
|
|
+ if (d.sqMan.isNotEmpty)
|
|
|
Text(
|
|
Text(
|
|
|
- '${l10n.get('applicant')}: ${d.sqMan}/${d.sqManName}',
|
|
|
|
|
|
|
+ '${l10n.get('applicant')}: ${d.sqMan}${d.sqManName.isNotEmpty ? '/${d.sqManName}' : ''}',
|
|
|
style: TextStyle(
|
|
style: TextStyle(
|
|
|
fontSize: AppFontSizes.caption,
|
|
fontSize: AppFontSizes.caption,
|
|
|
color: colors.textSecondary,
|
|
color: colors.textSecondary,
|
|
@@ -915,11 +915,12 @@ class _ExpAttachmentThumbnailState extends State<_ExpAttachmentThumbnail> {
|
|
|
Future<void> _load() async {
|
|
Future<void> _load() async {
|
|
|
try {
|
|
try {
|
|
|
final bytes = await widget.api.downloadAttachment(widget.attachment.id);
|
|
final bytes = await widget.api.downloadAttachment(widget.attachment.id);
|
|
|
- if (mounted)
|
|
|
|
|
|
|
+ if (mounted) {
|
|
|
setState(() {
|
|
setState(() {
|
|
|
_bytes = bytes;
|
|
_bytes = bytes;
|
|
|
_loading = false;
|
|
_loading = false;
|
|
|
});
|
|
});
|
|
|
|
|
+ }
|
|
|
} catch (_) {
|
|
} catch (_) {
|
|
|
if (mounted) setState(() => _loading = false);
|
|
if (mounted) setState(() => _loading = false);
|
|
|
}
|
|
}
|