diff --git a/src/containers/Sales/Invoices/InvoiceForm/FlagKit.js b/src/components/Tags/FlagTag.js similarity index 88% rename from src/containers/Sales/Invoices/InvoiceForm/FlagKit.js rename to src/components/Tags/FlagTag.js index 0a64a8ad6..ed3623d8b 100644 --- a/src/containers/Sales/Invoices/InvoiceForm/FlagKit.js +++ b/src/components/Tags/FlagTag.js @@ -1,7 +1,7 @@ import React from 'react'; import styled from 'styled-components'; -export default function FlagKit({ flage }) { +export const FlagTag = ({ flage }) => { return ( ); -} +}; const Img = styled.img` display: inline-block; diff --git a/src/components/Tags/index.js b/src/components/Tags/index.js index 7eca83954..03795ed67 100644 --- a/src/components/Tags/index.js +++ b/src/components/Tags/index.js @@ -1,3 +1,4 @@ -export * from './CurrencyTag'; \ No newline at end of file +export * from './CurrencyTag'; +export * from './FlagTag' \ No newline at end of file diff --git a/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.schema.js b/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.schema.js index dd89ccbba..eaedac85f 100644 --- a/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.schema.js +++ b/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.schema.js @@ -3,53 +3,51 @@ import intl from 'react-intl-universal'; import { DATATYPES_LENGTH } from 'common/dataTypes'; import { isBlank } from 'utils'; -const getSchema = () => Yup.object().shape({ - customer_id: Yup.string() - .label(intl.get('customer_name_')) - .required(), - invoice_date: Yup.date() - .required() - .label(intl.get('invoice_date_')), - due_date: Yup.date() - .required() - .label(intl.get('due_date_')), - invoice_no: Yup.string() - .max(DATATYPES_LENGTH.STRING) - .label(intl.get('invoice_no_')), - reference_no: Yup.string().min(1).max(DATATYPES_LENGTH.STRING), - delivered: Yup.boolean(), - from_estimate_id: Yup.string(), - invoice_message: Yup.string() - .trim() - .min(1) - .max(DATATYPES_LENGTH.TEXT) - .label(intl.get('note')), - terms_conditions: Yup.string() - .trim() - .min(1) - .max(DATATYPES_LENGTH.TEXT) - .label(intl.get('note')), - entries: Yup.array().of( - Yup.object().shape({ - quantity: Yup.number() - .nullable() - .max(DATATYPES_LENGTH.INT_10) - .when(['rate'], { - is: (rate) => rate, - then: Yup.number().required(), - }), - rate: Yup.number().nullable().max(DATATYPES_LENGTH.INT_10), - item_id: Yup.number() - .nullable() - .when(['quantity', 'rate'], { - is: (quantity, rate) => !isBlank(quantity) && !isBlank(rate), - then: Yup.number().required(), - }), - discount: Yup.number().nullable().min(0).max(100), - description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT), - }), - ), -}); +const getSchema = () => + Yup.object().shape({ + customer_id: Yup.string().label(intl.get('customer_name_')).required(), + invoice_date: Yup.date().required().label(intl.get('invoice_date_')), + due_date: Yup.date().required().label(intl.get('due_date_')), + invoice_no: Yup.string() + .max(DATATYPES_LENGTH.STRING) + .label(intl.get('invoice_no_')), + reference_no: Yup.string().min(1).max(DATATYPES_LENGTH.STRING), + delivered: Yup.boolean(), + from_estimate_id: Yup.string(), + invoice_message: Yup.string() + .trim() + .min(1) + .max(DATATYPES_LENGTH.TEXT) + .label(intl.get('note')), + terms_conditions: Yup.string() + .trim() + .min(1) + .max(DATATYPES_LENGTH.TEXT) + .label(intl.get('note')), + exchange_rate: Yup.number(), + branch_id: Yup.string(), + warehouse_id: Yup.string(), + entries: Yup.array().of( + Yup.object().shape({ + quantity: Yup.number() + .nullable() + .max(DATATYPES_LENGTH.INT_10) + .when(['rate'], { + is: (rate) => rate, + then: Yup.number().required(), + }), + rate: Yup.number().nullable().max(DATATYPES_LENGTH.INT_10), + item_id: Yup.number() + .nullable() + .when(['quantity', 'rate'], { + is: (quantity, rate) => !isBlank(quantity) && !isBlank(rate), + then: Yup.number().required(), + }), + discount: Yup.number().nullable().min(0).max(100), + description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT), + }), + ), + }); export const getCreateInvoiceFormSchema = getSchema; export const getEditInvoiceFormSchema = getSchema; diff --git a/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormHeaderFields.js b/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormHeaderFields.js index 11a9c319a..135b78af0 100644 --- a/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormHeaderFields.js +++ b/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormHeaderFields.js @@ -4,12 +4,13 @@ import { InputGroup, Position, ControlGroup, - Classes, } from '@blueprintjs/core'; import { DateInput } from '@blueprintjs/datetime'; import { FastField, Field, ErrorMessage } from 'formik'; import { FormattedMessage as T, Col, Row } from 'components'; import { momentFormatter, compose, tansformDateValue } from 'utils'; +import { upperCase } from 'lodash'; + import classNames from 'classnames'; import styled from 'styled-components'; @@ -25,19 +26,22 @@ import { Icon, InputPrependButton, MoneyInputGroup, + FlagTag, } from 'components'; -import ItemsSuggestField from 'components/ItemsSuggestField'; import { useInvoiceFormContext } from './InvoiceFormProvider'; import withSettings from 'containers/Settings/withSettings'; import withDialogActions from 'containers/Dialog/withDialogActions'; import { inputIntent, handleDateChange } from 'utils'; import BaseCurrency from './BaseCurrency'; -import FlagKit from './FlagKit'; const Data = [ { - id: '10', + id: 10, + name: 'Due on Receipt', + }, + { + id: 20, name: 'Due on Receipt', }, ]; @@ -118,7 +122,7 @@ function InvoiceFormHeaderFields({ - 1 USD = + 1 USD = {/* ----------- Exchange reate ----------- */} @@ -138,14 +142,16 @@ function InvoiceFormHeaderFields({ value={field.value} allowDecimals={false} allowNegativeValue={true} - onChange={(value) => {}} + onChange={(value) => { + setFieldValue('exchange_rate', value); + }} intent={inputIntent({ error, touched })} /> )} - LYD + LYD diff --git a/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormTopBar.js b/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormTopBar.js index 3d4b4afc5..1cc828986 100644 --- a/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormTopBar.js +++ b/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormTopBar.js @@ -17,30 +17,30 @@ export default function InvoiceFormTopBar() { return ( - + {({ form, field: { value }, meta: { error, touched } }) => ( { - form.setFieldValue('name', item.id); + onItemSelected={({ id }) => { + form.setFieldValue('branch_id', id); }} selectedItemId={value} buttonProps={{ - icon: , + icon: , }} /> )} - + {({ form, field: { value }, meta: { error, touched } }) => ( { - form.setFieldValue('warehouse', item.id); + onItemSelected={({ id }) => { + form.setFieldValue('warehouse_id', id); }} selectedItemId={value} buttonProps={{ diff --git a/src/containers/Sales/Invoices/InvoiceForm/utils.js b/src/containers/Sales/Invoices/InvoiceForm/utils.js index 7116ba19d..cbe52c399 100644 --- a/src/containers/Sales/Invoices/InvoiceForm/utils.js +++ b/src/containers/Sales/Invoices/InvoiceForm/utils.js @@ -43,6 +43,9 @@ export const defaultInvoice = { reference_no: '', invoice_message: '', terms_conditions: '', + exchange_rate: '', + branch_id: '', + warehouse_id: '', entries: [...repeatValue(defaultInvoiceEntry, MIN_LINES_NUMBER)], }; diff --git a/src/static/json/icons.js b/src/static/json/icons.js index 01f4f6d57..892a994bb 100644 --- a/src/static/json/icons.js +++ b/src/static/json/icons.js @@ -528,7 +528,7 @@ export default { ], viewBox: '0 0 24 24', }, - 'domain-16': { + 'branch-16': { path: [ 'M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z', ],