✨ Show details about purchase
🐛 Update user balance
This commit is contained in:
1 parent
3d93a645ad
commit
2bcc993aaa
8 files changed
+87
-24
No files matched your search
@@ -15,7 +15,9 @@ const App: React.FC = () => (
|
|||||||
<Router>
|
<Router>
|
||||||
<ToastProvider>
|
<ToastProvider>
|
||||||
<Header />
|
<Header />
|
||||||
<div className={styles.app}></div>
|
<div className={styles.app}>
|
||||||
|
<Routes />
|
||||||
|
</div>
|
||||||
<Toast />
|
<Toast />
|
||||||
</ToastProvider>
|
</ToastProvider>
|
||||||
</Router>
|
</Router>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ mutation CreateDeposit($userId: ID!, $amount: Int!) {
|
|||||||
firstName
|
firstName
|
||||||
lastName
|
lastName
|
||||||
profile {
|
profile {
|
||||||
|
id
|
||||||
balance
|
balance
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ import { useRegister } from "./useRegister";
|
|||||||
|
|
||||||
const USER_EXTERNAL = "external";
|
const USER_EXTERNAL = "external";
|
||||||
|
|
||||||
type OrderLine = {
|
type OrderLineInput = {
|
||||||
productId: string;
|
productId: string;
|
||||||
amount: number;
|
amount: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
const sumTotal = (products: Product[], order: OrderLine[], isExternal: boolean) => {
|
const sumTotal = (products: Product[], order: OrderLineInput[], isExternal: boolean) => {
|
||||||
const prices = order.map((orderLine: OrderLine) => {
|
const prices = order.map((orderLine: OrderLineInput) => {
|
||||||
const product = products.find((product: Product) => product.id === orderLine.productId);
|
const product = products.find((product: Product) => product.id === orderLine.productId);
|
||||||
if (!product) return 0;
|
if (!product) return 0;
|
||||||
return orderLine.amount * (isExternal ? product.salePriceExt : product.salePriceInt);
|
return orderLine.amount * (isExternal ? product.salePriceExt : product.salePriceInt);
|
||||||
@@ -27,7 +27,7 @@ const sumTotal = (products: Product[], order: OrderLine[], isExternal: boolean)
|
|||||||
export const Register: React.FC = () => {
|
export const Register: React.FC = () => {
|
||||||
const { users, products, loading, showAll, setShowAll } = useRegister();
|
const { users, products, loading, showAll, setShowAll } = useRegister();
|
||||||
const [selectedUser, setSelectedUser] = useState("");
|
const [selectedUser, setSelectedUser] = useState("");
|
||||||
const [order, setOrder] = useState<OrderLine[]>([]);
|
const [order, setOrder] = useState<OrderLineInput[]>([]);
|
||||||
const [createOrderMutation, { loading: mutateLoading }] = useMutation(CreateOrderDocument, {
|
const [createOrderMutation, { loading: mutateLoading }] = useMutation(CreateOrderDocument, {
|
||||||
variables: { customerId: selectedUser, isExternal: selectedUser === USER_EXTERNAL, orderLines: order },
|
variables: { customerId: selectedUser, isExternal: selectedUser === USER_EXTERNAL, orderLines: order },
|
||||||
});
|
});
|
||||||
@@ -39,7 +39,7 @@ export const Register: React.FC = () => {
|
|||||||
};
|
};
|
||||||
const addToOrder = (productId: string) => {
|
const addToOrder = (productId: string) => {
|
||||||
let added = false;
|
let added = false;
|
||||||
const newOrder = order.map((orderLine: OrderLine) => {
|
const newOrder = order.map((orderLine: OrderLineInput) => {
|
||||||
if (orderLine.productId === productId) {
|
if (orderLine.productId === productId) {
|
||||||
added = true;
|
added = true;
|
||||||
return { ...orderLine, amount: orderLine.amount + 1 };
|
return { ...orderLine, amount: orderLine.amount + 1 };
|
||||||
@@ -54,8 +54,6 @@ export const Register: React.FC = () => {
|
|||||||
|
|
||||||
const total = sumTotal(products, order, selectedUser === USER_EXTERNAL);
|
const total = sumTotal(products, order, selectedUser === USER_EXTERNAL);
|
||||||
|
|
||||||
console.log(selectedUser, order);
|
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return <div>Loading...</div>;
|
return <div>Loading...</div>;
|
||||||
}
|
}
|
||||||
@@ -72,7 +70,12 @@ export const Register: React.FC = () => {
|
|||||||
const { data } = res;
|
const { data } = res;
|
||||||
const createOrderResponse = data?.createOrder;
|
const createOrderResponse = data?.createOrder;
|
||||||
if (createOrderResponse?.__typename === "CreateOrderSuccess") {
|
if (createOrderResponse?.__typename === "CreateOrderSuccess") {
|
||||||
showToast("Woop");
|
const { order } = createOrderResponse;
|
||||||
|
const orderLines = (order?.orderlines || [])
|
||||||
|
.map((orderLine) => `${orderLine.amount} ${orderLine.product.name}`)
|
||||||
|
.join(", ");
|
||||||
|
const who = !order.customer ? "Ekstern" : `${order.customer?.firstName} ${order.customer?.lastName}`;
|
||||||
|
showToast(`${who} kjøpte: ${orderLines}`);
|
||||||
reset();
|
reset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -118,8 +121,8 @@ export const Register: React.FC = () => {
|
|||||||
key={product.id}
|
key={product.id}
|
||||||
product={product}
|
product={product}
|
||||||
onProduct={() => addToOrder(product.id)}
|
onProduct={() => addToOrder(product.id)}
|
||||||
amount={order.find((orderLine: OrderLine) => orderLine.productId === product.id)?.amount || 0}
|
amount={order.find((orderLine: OrderLineInput) => orderLine.productId === product.id)?.amount || 0}
|
||||||
active={order.some((orderLine: OrderLine) => orderLine.productId === product.id)}
|
active={order.some((orderLine: OrderLineInput) => orderLine.productId === product.id)}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,10 +1,28 @@
|
|||||||
mutation CreateOrder($customerId: ID!, $orderLines:[OrderLineInput!]!, $isExternal: Boolean) {
|
mutation CreateOrder($customerId: ID!, $orderLines:[OrderLineInput!]!, $isExternal: Boolean!) {
|
||||||
createOrder(customerId: $customerId, orderLines: $orderLines, isExternal: $isExternal) {
|
createOrder(customerId: $customerId, orderLines: $orderLines, isExternal: $isExternal) {
|
||||||
... on CreateOrderSuccess {
|
... on CreateOrderSuccess {
|
||||||
order {
|
order {
|
||||||
id
|
id
|
||||||
|
isExternal
|
||||||
customer {
|
customer {
|
||||||
id
|
id
|
||||||
|
firstName
|
||||||
|
lastName
|
||||||
|
profile {
|
||||||
|
id
|
||||||
|
balance
|
||||||
|
}
|
||||||
|
}
|
||||||
|
orderlines {
|
||||||
|
id
|
||||||
|
amount
|
||||||
|
unitPrice
|
||||||
|
product {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
salePriceExt
|
||||||
|
salePriceInt
|
||||||
|
}
|
||||||
}
|
}
|
||||||
orderSum
|
orderSum
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-5
@@ -86,7 +86,18 @@ export type Order = {
|
|||||||
created: Scalars['DateTime'];
|
created: Scalars['DateTime'];
|
||||||
customer?: Maybe<User>;
|
customer?: Maybe<User>;
|
||||||
id: Scalars['ID'];
|
id: Scalars['ID'];
|
||||||
|
isExternal: Scalars['Boolean'];
|
||||||
orderSum: Scalars['Float'];
|
orderSum: Scalars['Float'];
|
||||||
|
orderlines?: Maybe<Array<OrderLine>>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type OrderLine = {
|
||||||
|
__typename?: 'OrderLine';
|
||||||
|
amount: Scalars['Int'];
|
||||||
|
id: Scalars['ID'];
|
||||||
|
order: Order;
|
||||||
|
product: Product;
|
||||||
|
unitPrice: Scalars['Float'];
|
||||||
};
|
};
|
||||||
|
|
||||||
export type OrderLineInput = {
|
export type OrderLineInput = {
|
||||||
@@ -150,7 +161,7 @@ export type CreateDepositMutationVariables = Exact<{
|
|||||||
}>;
|
}>;
|
||||||
|
|
||||||
|
|
||||||
export type CreateDepositMutation = { __typename?: 'Mutation', createDeposit: { __typename?: 'AboveMaxSaldo', error: boolean, message: string, maxSaldo: number, above: number } | { __typename?: 'CreateDepositSuccess', transaction: { __typename?: 'Transaction', id: string, amount: number, user: { __typename?: 'User', id: string, firstName: string, lastName: string, profile?: { __typename?: 'UserProfile', balance: number } | null | undefined } } } | { __typename?: 'FormErrors', error: boolean, message: string, fields: Array<{ __typename?: 'FieldError', field: string, message: string }> } };
|
export type CreateDepositMutation = { __typename?: 'Mutation', createDeposit: { __typename?: 'AboveMaxSaldo', error: boolean, message: string, maxSaldo: number, above: number } | { __typename?: 'CreateDepositSuccess', transaction: { __typename?: 'Transaction', id: string, amount: number, user: { __typename?: 'User', id: string, firstName: string, lastName: string, profile?: { __typename?: 'UserProfile', id: string, balance: number } | null | undefined } } } | { __typename?: 'FormErrors', error: boolean, message: string, fields: Array<{ __typename?: 'FieldError', field: string, message: string }> } };
|
||||||
|
|
||||||
export type AllProductsQueryVariables = Exact<{
|
export type AllProductsQueryVariables = Exact<{
|
||||||
active: Scalars['Boolean'];
|
active: Scalars['Boolean'];
|
||||||
@@ -167,14 +178,14 @@ export type AllUsersQuery = { __typename?: 'Query', allUsers: Array<{ __typename
|
|||||||
export type CreateOrderMutationVariables = Exact<{
|
export type CreateOrderMutationVariables = Exact<{
|
||||||
customerId: Scalars['ID'];
|
customerId: Scalars['ID'];
|
||||||
orderLines: Array<OrderLineInput> | OrderLineInput;
|
orderLines: Array<OrderLineInput> | OrderLineInput;
|
||||||
isExternal?: Maybe<Scalars['Boolean']>;
|
isExternal: Scalars['Boolean'];
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
|
|
||||||
export type CreateOrderMutation = { __typename?: 'Mutation', createOrder: { __typename?: 'CreateOrderSuccess', order: { __typename?: 'Order', id: string, orderSum: number, customer?: { __typename?: 'User', id: string } | null | undefined } } | { __typename?: 'FormErrors', error: boolean, message: string, fields: Array<{ __typename?: 'FieldError', field: string, message: string }> } | { __typename?: 'InsufficientFunds', error: boolean, message: string, amountLacking: number } };
|
export type CreateOrderMutation = { __typename?: 'Mutation', createOrder: { __typename?: 'CreateOrderSuccess', order: { __typename?: 'Order', id: string, isExternal: boolean, orderSum: number, customer?: { __typename?: 'User', id: string, firstName: string, lastName: string, profile?: { __typename?: 'UserProfile', id: string, balance: number } | null | undefined } | null | undefined, orderlines?: Array<{ __typename?: 'OrderLine', id: string, amount: number, unitPrice: number, product: { __typename?: 'Product', id: string, name: string, salePriceExt: number, salePriceInt: number } }> | null | undefined } } | { __typename?: 'FormErrors', error: boolean, message: string, fields: Array<{ __typename?: 'FieldError', field: string, message: string }> } | { __typename?: 'InsufficientFunds', error: boolean, message: string, amountLacking: number } };
|
||||||
|
|
||||||
|
|
||||||
export const CreateDepositDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateDeposit"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"userId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"amount"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createDeposit"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"userId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"userId"}}},{"kind":"Argument","name":{"kind":"Name","value":"amount"},"value":{"kind":"Variable","name":{"kind":"Name","value":"amount"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"CreateDepositSuccess"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"transaction"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"balance"}}]}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AboveMaxSaldo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"maxSaldo"}},{"kind":"Field","name":{"kind":"Name","value":"above"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FormErrors"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"field"}},{"kind":"Field","name":{"kind":"Name","value":"message"}}]}}]}}]}}]}}]} as unknown as DocumentNode<CreateDepositMutation, CreateDepositMutationVariables>;
|
export const CreateDepositDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateDeposit"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"userId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"amount"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createDeposit"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"userId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"userId"}}},{"kind":"Argument","name":{"kind":"Name","value":"amount"},"value":{"kind":"Variable","name":{"kind":"Name","value":"amount"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"CreateDepositSuccess"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"transaction"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"balance"}}]}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AboveMaxSaldo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"maxSaldo"}},{"kind":"Field","name":{"kind":"Name","value":"above"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FormErrors"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"field"}},{"kind":"Field","name":{"kind":"Name","value":"message"}}]}}]}}]}}]}}]} as unknown as DocumentNode<CreateDepositMutation, CreateDepositMutationVariables>;
|
||||||
export const AllProductsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"allProducts"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"active"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"allProducts"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"active"},"value":{"kind":"Variable","name":{"kind":"Name","value":"active"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"imageUrl"}},{"kind":"Field","name":{"kind":"Name","value":"salePriceExt"}},{"kind":"Field","name":{"kind":"Name","value":"salePriceInt"}}]}}]}}]} as unknown as DocumentNode<AllProductsQuery, AllProductsQueryVariables>;
|
export const AllProductsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"allProducts"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"active"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"allProducts"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"active"},"value":{"kind":"Variable","name":{"kind":"Name","value":"active"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"imageUrl"}},{"kind":"Field","name":{"kind":"Name","value":"salePriceExt"}},{"kind":"Field","name":{"kind":"Name","value":"salePriceInt"}}]}}]}}]} as unknown as DocumentNode<AllProductsQuery, AllProductsQueryVariables>;
|
||||||
export const AllUsersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"allUsers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"allUsers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"balance"}},{"kind":"Field","name":{"kind":"Name","value":"image"}},{"kind":"Field","name":{"kind":"Name","value":"lastPurchaseDate"}}]}}]}}]}}]} as unknown as DocumentNode<AllUsersQuery, AllUsersQueryVariables>;
|
export const AllUsersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"allUsers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"allUsers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"balance"}},{"kind":"Field","name":{"kind":"Name","value":"image"}},{"kind":"Field","name":{"kind":"Name","value":"lastPurchaseDate"}}]}}]}}]}}]} as unknown as DocumentNode<AllUsersQuery, AllUsersQueryVariables>;
|
||||||
export const CreateOrderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOrder"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"customerId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderLines"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"OrderLineInput"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"isExternal"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOrder"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"customerId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"customerId"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderLines"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderLines"}}},{"kind":"Argument","name":{"kind":"Name","value":"isExternal"},"value":{"kind":"Variable","name":{"kind":"Name","value":"isExternal"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOrderSuccess"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"order"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"customer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"orderSum"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"InsufficientFunds"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"amountLacking"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FormErrors"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"field"}},{"kind":"Field","name":{"kind":"Name","value":"message"}}]}}]}}]}}]}}]} as unknown as DocumentNode<CreateOrderMutation, CreateOrderMutationVariables>;
|
export const CreateOrderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOrder"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"customerId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderLines"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"OrderLineInput"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"isExternal"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOrder"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"customerId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"customerId"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderLines"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderLines"}}},{"kind":"Argument","name":{"kind":"Name","value":"isExternal"},"value":{"kind":"Variable","name":{"kind":"Name","value":"isExternal"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOrderSuccess"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"order"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isExternal"}},{"kind":"Field","name":{"kind":"Name","value":"customer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"balance"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"orderlines"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}},{"kind":"Field","name":{"kind":"Name","value":"unitPrice"}},{"kind":"Field","name":{"kind":"Name","value":"product"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"salePriceExt"}},{"kind":"Field","name":{"kind":"Name","value":"salePriceInt"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"orderSum"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"InsufficientFunds"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"amountLacking"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FormErrors"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"field"}},{"kind":"Field","name":{"kind":"Name","value":"message"}}]}}]}}]}}]}}]} as unknown as DocumentNode<CreateOrderMutation, CreateOrderMutationVariables>;
|
||||||
+14
-7
@@ -36,11 +36,11 @@ CreateOrderResponse = strawberry.union("CreateOrderResponse", [CreateOrderSucces
|
|||||||
def create_order(customer_id: ID, order_lines: list[OrderLineInput], is_external: bool = False) -> CreateOrderResponse:
|
def create_order(customer_id: ID, order_lines: list[OrderLineInput], is_external: bool = False) -> CreateOrderResponse:
|
||||||
# clean and validate
|
# clean and validate
|
||||||
try:
|
try:
|
||||||
customer = UserModel.objects.get(pk=customer_id)
|
user = UserModel.objects.get(pk=customer_id)
|
||||||
except (UserModel.DoesNotExist, ValueError):
|
except (UserModel.DoesNotExist, ValueError):
|
||||||
customer = None
|
user = None
|
||||||
|
|
||||||
if customer is None and not is_external:
|
if user is None and not is_external:
|
||||||
message = "Du har ikke valgt hvem som skal kjøpe."
|
message = "Du har ikke valgt hvem som skal kjøpe."
|
||||||
return FormErrors(
|
return FormErrors(
|
||||||
message=message,
|
message=message,
|
||||||
@@ -60,18 +60,25 @@ def create_order(customer_id: ID, order_lines: list[OrderLineInput], is_external
|
|||||||
price = product.sale_price_ext if is_external else product.sale_price_int
|
price = product.sale_price_ext if is_external else product.sale_price_int
|
||||||
ols.append(models.OrderLine(product=product, amount=ol.amount, unit_price=price))
|
ols.append(models.OrderLine(product=product, amount=ol.amount, unit_price=price))
|
||||||
order_sum += ol.amount * price
|
order_sum += ol.amount * price
|
||||||
|
product.inventory_amount -= ol.amount
|
||||||
|
product.save()
|
||||||
|
|
||||||
if not is_external and customer.profile.balance <= order_sum:
|
if not is_external and user.profile.balance <= order_sum:
|
||||||
return InsufficientFunds(
|
return InsufficientFunds(
|
||||||
message="Du har ikke nok penger på bok.", amount_lacking=abs(order_sum - customer.profile.balance)
|
message="Du har ikke nok penger på bok.", amount_lacking=abs(order_sum - profile.balance)
|
||||||
)
|
)
|
||||||
|
|
||||||
# create
|
# create
|
||||||
order = models.Order.objects.create(customer=customer, order_sum=order_sum)
|
order = models.Order.objects.create(customer=user, order_sum=order_sum)
|
||||||
for ol in ols:
|
for ol in ols:
|
||||||
ol.order = order
|
ol.order = order
|
||||||
models.OrderLine.objects.bulk_create(ols)
|
models.OrderLine.objects.bulk_create(ols)
|
||||||
|
|
||||||
|
# update balance
|
||||||
|
if not is_external:
|
||||||
|
user.profile.balance -= order_sum
|
||||||
|
user.profile.save()
|
||||||
|
|
||||||
return CreateOrderSuccess(order=order)
|
return CreateOrderSuccess(order=order)
|
||||||
|
|
||||||
|
|
||||||
@@ -110,7 +117,7 @@ def create_deposit(user_id: ID, amount: int) -> CreateDepositResponse:
|
|||||||
# 1337 is special <3
|
# 1337 is special <3
|
||||||
if amount + user.profile.balance > settings.BBS_SALDO_MAX and amount + user.profile.balance != 1337:
|
if amount + user.profile.balance > settings.BBS_SALDO_MAX and amount + user.profile.balance != 1337:
|
||||||
return AboveMaxSaldo(
|
return AboveMaxSaldo(
|
||||||
message='Du prøver å sette inn for mye penger',
|
message="Du prøver å sette inn for mye penger",
|
||||||
max_saldo=settings.BBS_SALDO_MAX,
|
max_saldo=settings.BBS_SALDO_MAX,
|
||||||
above=amount + user.profile.balance - settings.BBS_SALDO_MAX,
|
above=amount + user.profile.balance - settings.BBS_SALDO_MAX,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -51,6 +51,17 @@ class Order:
|
|||||||
customer: "User"
|
customer: "User"
|
||||||
order_sum: auto
|
order_sum: auto
|
||||||
created: auto
|
created: auto
|
||||||
|
orderlines: list["OrderLine"]
|
||||||
|
is_external: bool
|
||||||
|
|
||||||
|
|
||||||
|
@strawberry_django.type(models.OrderLine)
|
||||||
|
class OrderLine:
|
||||||
|
id: auto
|
||||||
|
order: "Order"
|
||||||
|
product: "Product"
|
||||||
|
amount: auto
|
||||||
|
unit_price: auto
|
||||||
|
|
||||||
|
|
||||||
@strawberry_django.type(models.Transaction)
|
@strawberry_django.type(models.Transaction)
|
||||||
|
|||||||
@@ -53,6 +53,16 @@ type Order {
|
|||||||
customer: User
|
customer: User
|
||||||
orderSum: Float!
|
orderSum: Float!
|
||||||
created: DateTime!
|
created: DateTime!
|
||||||
|
orderlines: [OrderLine!]
|
||||||
|
isExternal: Boolean!
|
||||||
|
}
|
||||||
|
|
||||||
|
type OrderLine {
|
||||||
|
id: ID!
|
||||||
|
order: Order!
|
||||||
|
product: Product!
|
||||||
|
amount: Int!
|
||||||
|
unitPrice: Float!
|
||||||
}
|
}
|
||||||
|
|
||||||
input OrderLineInput {
|
input OrderLineInput {
|
||||||
|
|||||||
Reference in new issue
Block a user