Purchase orders
This commit is contained in:
parent
a222e93d0d
commit
7312508913
|
|
@ -518,6 +518,8 @@ const String kPdfFieldsInvoiceDetails = 'invoice_details';
|
||||||
const String kPdfFieldsQuoteDetails = 'quote_details';
|
const String kPdfFieldsQuoteDetails = 'quote_details';
|
||||||
const String kPdfFieldsCreditDetails = 'credit_details';
|
const String kPdfFieldsCreditDetails = 'credit_details';
|
||||||
const String kPdfFieldsProductColumns = 'product_columns';
|
const String kPdfFieldsProductColumns = 'product_columns';
|
||||||
|
const String kPdfFieldsVendorDetails = 'vendor_details';
|
||||||
|
const String kPdfFieldsPurchaseOrderDetails = 'purchase_order_details';
|
||||||
const String kPdfFieldsTaskColumns = 'task_columns';
|
const String kPdfFieldsTaskColumns = 'task_columns';
|
||||||
const String kPdfFieldsTotalFields = 'total_columns';
|
const String kPdfFieldsTotalFields = 'total_columns';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ class PurchaseOrderFields {
|
||||||
static const String discount = 'discount';
|
static const String discount = 'discount';
|
||||||
static const String poNumber = 'po_number';
|
static const String poNumber = 'po_number';
|
||||||
static const String date = 'date';
|
static const String date = 'date';
|
||||||
static const String validUntil = 'valid_until';
|
static const String dueDate = 'due_date';
|
||||||
static const String nextSendDate = 'next_send_date';
|
static const String nextSendDate = 'next_send_date';
|
||||||
static const String lastSentDate = 'last_sent_date';
|
static const String lastSentDate = 'last_sent_date';
|
||||||
static const String terms = 'terms';
|
static const String terms = 'terms';
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ class VendorFields {
|
||||||
static const String state = 'state';
|
static const String state = 'state';
|
||||||
static const String postalCode = 'postal_code';
|
static const String postalCode = 'postal_code';
|
||||||
static const String countryId = 'country_id';
|
static const String countryId = 'country_id';
|
||||||
|
static const String country = 'country';
|
||||||
static const String phone = 'phone';
|
static const String phone = 'phone';
|
||||||
static const String privateNotes = 'private_notes';
|
static const String privateNotes = 'private_notes';
|
||||||
static const String publicNotes = 'public_notes';
|
static const String publicNotes = 'public_notes';
|
||||||
|
|
@ -74,6 +75,8 @@ class VendorFields {
|
||||||
static const String isDeleted = 'is_deleted';
|
static const String isDeleted = 'is_deleted';
|
||||||
static const String documents = 'documents';
|
static const String documents = 'documents';
|
||||||
static const String contacts = 'contacts';
|
static const String contacts = 'contacts';
|
||||||
|
static const String cityStatePostal = 'city_state_postal';
|
||||||
|
static const String postalCityState = 'postal_city_state';
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class VendorEntity extends Object
|
abstract class VendorEntity extends Object
|
||||||
|
|
|
||||||
|
|
@ -405,7 +405,8 @@ class InvoiceEditDesktopState extends State<InvoiceEditDesktop>
|
||||||
),
|
),
|
||||||
DatePicker(
|
DatePicker(
|
||||||
key: ValueKey('__terms_${client.id}__'),
|
key: ValueKey('__terms_${client.id}__'),
|
||||||
labelText: entityType == EntityType.invoice
|
labelText: entityType == EntityType.invoice ||
|
||||||
|
entityType == EntityType.purchaseOrder
|
||||||
? localization.dueDate
|
? localization.dueDate
|
||||||
: localization.validUntil,
|
: localization.validUntil,
|
||||||
selectedDate: invoice.dueDate,
|
selectedDate: invoice.dueDate,
|
||||||
|
|
|
||||||
|
|
@ -284,7 +284,8 @@ class InvoiceEditDetailsState extends State<InvoiceEditDetails> {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
DatePicker(
|
DatePicker(
|
||||||
labelText: widget.entityType == EntityType.invoice
|
labelText: widget.entityType == EntityType.invoice ||
|
||||||
|
widget.entityType == EntityType.purchaseOrder
|
||||||
? localization.dueDate
|
? localization.dueDate
|
||||||
: localization.validUntil,
|
: localization.validUntil,
|
||||||
selectedDate: invoice.dueDate,
|
selectedDate: invoice.dueDate,
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,7 @@ class InvoiceOverview extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
String dueDateField = InvoiceFields.dueDate;
|
String dueDateField = InvoiceFields.dueDate;
|
||||||
if (invoice.isQuote || invoice.isPurchaseOrder) {
|
if (invoice.isQuote || invoice.isCredit) {
|
||||||
dueDateField = QuoteFields.validUntil;
|
dueDateField = QuoteFields.validUntil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ class PurchaseOrderPresenter extends EntityPresenter {
|
||||||
PurchaseOrderFields.vendor,
|
PurchaseOrderFields.vendor,
|
||||||
PurchaseOrderFields.amount,
|
PurchaseOrderFields.amount,
|
||||||
PurchaseOrderFields.date,
|
PurchaseOrderFields.date,
|
||||||
PurchaseOrderFields.validUntil,
|
PurchaseOrderFields.dueDate,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -86,7 +86,7 @@ class PurchaseOrderPresenter extends EntityPresenter {
|
||||||
child: Text(formatNumber(purchaseOrder.amount, context,
|
child: Text(formatNumber(purchaseOrder.amount, context,
|
||||||
clientId: purchaseOrder.clientId)),
|
clientId: purchaseOrder.clientId)),
|
||||||
);
|
);
|
||||||
case PurchaseOrderFields.validUntil:
|
case PurchaseOrderFields.dueDate:
|
||||||
return Text(formatDate(purchaseOrder.dueDate, context));
|
return Text(formatDate(purchaseOrder.dueDate, context));
|
||||||
case PurchaseOrderFields.customValue1:
|
case PurchaseOrderFields.customValue1:
|
||||||
return Text(presentCustomField(context, purchaseOrder.customValue1));
|
return Text(presentCustomField(context, purchaseOrder.customValue1));
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ class PurchaseOrderScreen extends StatelessWidget {
|
||||||
sortFields: [
|
sortFields: [
|
||||||
PurchaseOrderFields.number,
|
PurchaseOrderFields.number,
|
||||||
PurchaseOrderFields.date,
|
PurchaseOrderFields.date,
|
||||||
PurchaseOrderFields.validUntil,
|
PurchaseOrderFields.dueDate,
|
||||||
EntityFields.updatedAt,
|
EntityFields.updatedAt,
|
||||||
],
|
],
|
||||||
onSelectedState: (EntityState state, value) {
|
onSelectedState: (EntityState state, value) {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
||||||
// Package imports:
|
// Package imports:
|
||||||
import 'package:flutter_redux/flutter_redux.dart';
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
|
import 'package:invoiceninja_flutter/data/models/purchase_order_model.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/quote_model.dart';
|
import 'package:invoiceninja_flutter/data/models/quote_model.dart';
|
||||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||||
|
|
||||||
|
|
@ -73,6 +74,8 @@ class _InvoiceDesignState extends State<InvoiceDesign>
|
||||||
EntityType.quote,
|
EntityType.quote,
|
||||||
EntityType.credit,
|
EntityType.credit,
|
||||||
EntityType.task,
|
EntityType.task,
|
||||||
|
EntityType.vendor,
|
||||||
|
EntityType.purchaseOrder,
|
||||||
].forEach((entityType) {
|
].forEach((entityType) {
|
||||||
if (state.company.isModuleEnabled(entityType)) {
|
if (state.company.isModuleEnabled(entityType)) {
|
||||||
tabs++;
|
tabs++;
|
||||||
|
|
@ -131,6 +134,10 @@ class _InvoiceDesignState extends State<InvoiceDesign>
|
||||||
Tab(text: localization.quoteDetails),
|
Tab(text: localization.quoteDetails),
|
||||||
if (company.isModuleEnabled(EntityType.credit))
|
if (company.isModuleEnabled(EntityType.credit))
|
||||||
Tab(text: localization.creditDetails),
|
Tab(text: localization.creditDetails),
|
||||||
|
if (company.isModuleEnabled(EntityType.vendor))
|
||||||
|
Tab(text: localization.vendorDetails),
|
||||||
|
if (company.isModuleEnabled(EntityType.purchaseOrder))
|
||||||
|
Tab(text: localization.purchaseOrderDetails),
|
||||||
Tab(text: localization.productColumns),
|
Tab(text: localization.productColumns),
|
||||||
if (company.isModuleEnabled(EntityType.task))
|
if (company.isModuleEnabled(EntityType.task))
|
||||||
Tab(text: localization.taskColumns),
|
Tab(text: localization.taskColumns),
|
||||||
|
|
@ -715,6 +722,92 @@ class _InvoiceDesignState extends State<InvoiceDesign>
|
||||||
prefix: 'credit',
|
prefix: 'credit',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
if (company.isModuleEnabled(EntityType.vendor))
|
||||||
|
FormCard(
|
||||||
|
isLast: true,
|
||||||
|
child: MultiSelectList(
|
||||||
|
options: [
|
||||||
|
...[
|
||||||
|
VendorFields.name,
|
||||||
|
VendorFields.number,
|
||||||
|
VendorFields.vatNumber,
|
||||||
|
VendorFields.address1,
|
||||||
|
VendorFields.address2,
|
||||||
|
VendorFields.cityStatePostal,
|
||||||
|
//VendorFields.postalCityState,
|
||||||
|
VendorFields.country,
|
||||||
|
VendorFields.customValue1,
|
||||||
|
VendorFields.customValue2,
|
||||||
|
VendorFields.customValue3,
|
||||||
|
VendorFields.customValue4,
|
||||||
|
].map((field) => '\$vendor.$field'),
|
||||||
|
...[
|
||||||
|
ContactFields.email,
|
||||||
|
].map((field) => '\$contact.$field'),
|
||||||
|
],
|
||||||
|
defaultSelected: [
|
||||||
|
...[
|
||||||
|
VendorFields.name,
|
||||||
|
VendorFields.number,
|
||||||
|
VendorFields.vatNumber,
|
||||||
|
VendorFields.address1,
|
||||||
|
VendorFields.address2,
|
||||||
|
VendorFields.cityStatePostal,
|
||||||
|
].map((field) => '\$vendor.$field'),
|
||||||
|
...[
|
||||||
|
ContactFields.email,
|
||||||
|
].map((field) => '\$contact.$field'),
|
||||||
|
],
|
||||||
|
selected: settings.getFieldsForSection(kPdfFieldsVendorDetails),
|
||||||
|
onSelected: (values) {
|
||||||
|
viewModel.onSettingsChanged(settings.setFieldsForSection(
|
||||||
|
kPdfFieldsVendorDetails, values));
|
||||||
|
},
|
||||||
|
addTitle: localization.addField,
|
||||||
|
liveChanges: true,
|
||||||
|
prefix: 'vendor',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (company.isModuleEnabled(EntityType.purchaseOrder))
|
||||||
|
FormCard(
|
||||||
|
isLast: true,
|
||||||
|
child: MultiSelectList(
|
||||||
|
options: [
|
||||||
|
...[
|
||||||
|
PurchaseOrderFields.number,
|
||||||
|
PurchaseOrderFields.date,
|
||||||
|
PurchaseOrderFields.dueDate,
|
||||||
|
PurchaseOrderFields.total,
|
||||||
|
PurchaseOrderFields.balanceDue,
|
||||||
|
//PurchaseOrderFields.customValue1,
|
||||||
|
//PurchaseOrderFields.customValue2,
|
||||||
|
//PurchaseOrderFields.customValue3,
|
||||||
|
//PurchaseOrderFields.customValue4,
|
||||||
|
].map((field) => '\$credit.$field'),
|
||||||
|
/*
|
||||||
|
...[
|
||||||
|
ClientFields.balance,
|
||||||
|
].map((field) => '\$client.$field')
|
||||||
|
*/
|
||||||
|
],
|
||||||
|
defaultSelected: [
|
||||||
|
PurchaseOrderFields.number,
|
||||||
|
PurchaseOrderFields.date,
|
||||||
|
PurchaseOrderFields.dueDate,
|
||||||
|
PurchaseOrderFields.total,
|
||||||
|
PurchaseOrderFields.balanceDue,
|
||||||
|
].map((field) => '\$purchase_order.$field').toList(),
|
||||||
|
selected: settings
|
||||||
|
.getFieldsForSection(kPdfFieldsPurchaseOrderDetails),
|
||||||
|
onSelected: (values) {
|
||||||
|
viewModel.onSettingsChanged(settings.setFieldsForSection(
|
||||||
|
kPdfFieldsPurchaseOrderDetails, values));
|
||||||
|
},
|
||||||
|
addTitle: localization.addField,
|
||||||
|
liveChanges: true,
|
||||||
|
prefix: 'purchase_order',
|
||||||
|
),
|
||||||
|
),
|
||||||
FormCard(
|
FormCard(
|
||||||
isLast: true,
|
isLast: true,
|
||||||
child: MultiSelectList(
|
child: MultiSelectList(
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
static final Map<String, Map<String, String>> _localizedValues = {
|
static final Map<String, Map<String, String>> _localizedValues = {
|
||||||
'en': {
|
'en': {
|
||||||
// STARTER: lang key - do not remove comment
|
// STARTER: lang key - do not remove comment
|
||||||
|
'vendor_details': 'Vendor Details',
|
||||||
|
'purchase_order_details': 'Purchase Order Details',
|
||||||
'qr_iban': 'QR IBAN',
|
'qr_iban': 'QR IBAN',
|
||||||
'besr_id': 'BESR ID',
|
'besr_id': 'BESR ID',
|
||||||
'accept': 'Accept',
|
'accept': 'Accept',
|
||||||
|
|
@ -70830,6 +70832,13 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
_localizedValues[localeCode]['besr_id'] ??
|
_localizedValues[localeCode]['besr_id'] ??
|
||||||
_localizedValues['en']['besr_id'];
|
_localizedValues['en']['besr_id'];
|
||||||
|
|
||||||
|
String get vendorDetails =>
|
||||||
|
_localizedValues[localeCode]['vendor_details'] ??
|
||||||
|
_localizedValues['en']['vendor_details'];
|
||||||
|
|
||||||
|
String get purchaseOrderDetails =>
|
||||||
|
_localizedValues[localeCode]['purchase_order_details'] ??
|
||||||
|
_localizedValues['en']['purchase_order_details'];
|
||||||
|
|
||||||
// STARTER: lang field - do not remove comment
|
// STARTER: lang field - do not remove comment
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue