Skip to content

Commit

Permalink
Merge pull request idurar#592 from idurar/feat/inc-last-invoice-quote…
Browse files Browse the repository at this point in the history
…-number

inc last invoice and quote by one
  • Loading branch information
salahlalami authored Oct 23, 2023
2 parents b25b226 + eb0dcf2 commit 615d11d
Show file tree
Hide file tree
Showing 10 changed files with 130 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const Model = mongoose.model('Invoice');
const custom = require('@/controllers/middlewaresControllers/pdfController');

const { calculate } = require('@/helpers');
const { increaseBySettingKey } = require('@/middlewares/settings');
const schema = require('./schemaValidate');

const create = async (req, res) => {
Expand Down Expand Up @@ -60,6 +61,8 @@ const create = async (req, res) => {
).exec();
// Returning successfull response

increaseBySettingKey({ settingKey: 'last_invoice_number' });

custom.generatePdf('Invoice', { filename: 'invoice', format: 'A4' }, result);

// Returning successfull response
Expand Down
3 changes: 2 additions & 1 deletion backend/controllers/appControllers/quoteController/create.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const mongoose = require('mongoose');
const Model = mongoose.model('Quote');

const custom = require('@/controllers/middlewaresControllers/pdfController');

const { increaseBySettingKey } = require('@/middlewares/settings');
const { calculate } = require('@/helpers');

const create = async (req, res) => {
Expand Down Expand Up @@ -47,6 +47,7 @@ const create = async (req, res) => {
).exec();
// Returning successfull response

increaseBySettingKey({ settingKey: 'last_quote_number' });
custom.generatePdf('Quote', { filename: 'quote', format: 'A4' }, result);

// Returning successfull response
Expand Down
2 changes: 0 additions & 2 deletions backend/middlewares/permission.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ exports.hasPermission = (permissionName = 'all') => {
const currentUserRole = req.admin.role;

if (roles[currentUserRole].includes(permissionName) || req.admin.role === 'admin') {
console.log('🚀 ~ file: permission.js:14 ~ req.admin.role:', req.admin.role);
console.log('🚀 ~ file: permission.js:25 ~ return ~ permissionName:', permissionName);
next();
} else {
return res.status(403).json({
Expand Down
34 changes: 34 additions & 0 deletions backend/middlewares/settings/increaseBySettingKey.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const mongoose = require('mongoose');

const Model = mongoose.model('Setting');

const increaseBySettingKey = async ({ settingKey }) => {
try {
if (!settingKey) {
return null;
}

const result = await Model.findOneAndUpdate(
{ settingKey },
{
$inc: { settingValue: 1 },
},
{
new: true, // return the new result instead of the old one
runValidators: true,
}
).exec();

// If no results found, return document not found
if (!result) {
return null;
} else {
// Return success resposne
return result;
}
} catch {
return null;
}
};

module.exports = increaseBySettingKey;
10 changes: 9 additions & 1 deletion backend/middlewares/settings/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
const listBySettingKey = require('./listBySettingKey');
const readBySettingKey = require('./readBySettingKey');
const listAllSetting = require('./listAllSetting');
const updateBySettingKey = require('./updateBySettingKey');
const increaseBySettingKey = require('./increaseBySettingKey');

module.exports = { listAllSetting, listBySettingKey, readBySettingKey };
module.exports = {
listAllSetting,
listBySettingKey,
readBySettingKey,
updateBySettingKey,
increaseBySettingKey,
};
37 changes: 37 additions & 0 deletions backend/middlewares/settings/updateBySettingKey.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const mongoose = require('mongoose');

const Model = mongoose.model('Setting');

const updateBySettingKey = async ({ settingKey, settingValue }) => {
try {
console.log(
'🚀 ~ file: updateBySettingKey.js:8 ~ updateBySettingKey ~ settingKey:',
settingKey
);
if (!settingKey || !settingValue) {
return null;
}

const result = await Model.findOneAndUpdate(
{ settingKey },
{
settingValue,
},
{
new: true, // return the new result instead of the old one
runValidators: true,
}
).exec();
// If no results found, return document not found
if (!result) {
return null;
} else {
// Return success resposne
return result;
}
} catch {
return null;
}
};

module.exports = updateBySettingKey;
Binary file added backend/public/uploads/admin/1698079487928.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 9 additions & 2 deletions frontend/src/modules/ErpPanelModule/CreateItem.jsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import React, { useState, useEffect } from 'react';
import React, { useState, useEffect, useLayoutEffect } from 'react';
import { Form, Divider } from 'antd';

import { Button, PageHeader, Tag } from 'antd';

import { useSelector, useDispatch } from 'react-redux';

import { settingsAction } from '@/redux/settings/actions';
import { erp } from '@/redux/erp/actions';
import { selectCreatedItem } from '@/redux/erp/selectors';

Expand All @@ -29,11 +31,16 @@ function SaveForm({ form, config }) {
}

export default function CreateItem({ config, CreateForm }) {
const dispatch = useDispatch();

useLayoutEffect(() => {
dispatch(settingsAction.list({ entity: 'setting' }));
}, []);
let { entity, CREATE_ENTITY } = config;
const { erpContextAction } = useErpContext();
const history = useHistory();
const { createPanel } = erpContextAction;
const dispatch = useDispatch();

const { isLoading, isSuccess } = useSelector(selectCreatedItem);
const [form] = Form.useForm();
const [subTotal, setSubTotal] = useState(0);
Expand Down
19 changes: 17 additions & 2 deletions frontend/src/modules/InvoiceModule/Forms/InvoiceForm.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,38 @@ import AutoCompleteAsync from '@/components/AutoCompleteAsync';
import ItemRow from '@/modules/ErpPanelModule/ItemRow';

import MoneyInputFormItem from '@/components/MoneyInputFormItem';
import { selectFinanceSettings } from '@/redux/settings/selectors';

import calculate from '@/utils/calculate';
import { useSelector } from 'react-redux';

export default function InvoiceForm({ subTotal = 0, current = null }) {
const { last_invoice_number } = useSelector(selectFinanceSettings);

if (!last_invoice_number) {
return <></>;
}

return <LoadInvoiceForm subTotal={subTotal} current={current} />;
}

function LoadInvoiceForm({ subTotal = 0, current = null }) {
const { last_invoice_number } = useSelector(selectFinanceSettings);
const [total, setTotal] = useState(0);
const [taxRate, setTaxRate] = useState(0);
const [taxTotal, setTaxTotal] = useState(0);
const [currentYear, setCurrentYear] = useState(() => new Date().getFullYear());
const [lastNumber, setLastNumber] = useState(() => last_invoice_number + 1);
const handelTaxChange = (value) => {
setTaxRate(value);
};

useEffect(() => {
if (current) {
const { taxRate = 0, year } = current;
const { taxRate = 0, year, number } = current;
setTaxRate(taxRate);
setCurrentYear(year);
setLastNumber(number);
}
}, [current]);
useEffect(() => {
Expand Down Expand Up @@ -68,7 +83,7 @@ export default function InvoiceForm({ subTotal = 0, current = null }) {
<Form.Item
label="Number"
name="number"
initialValue={1}
initialValue={lastNumber}
rules={[
{
required: true,
Expand Down
22 changes: 19 additions & 3 deletions frontend/src/modules/QuoteModule/Forms/QuoteForm.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,25 @@ import AutoCompleteAsync from '@/components/AutoCompleteAsync';
import ItemRow from '@/modules/ErpPanelModule/ItemRow';

import MoneyInputFormItem from '@/components/MoneyInputFormItem';
import { selectFinanceSettings } from '@/redux/settings/selectors';

import calculate from '@/utils/calculate';
import { useSelector } from 'react-redux';

export default function InvoiceForm({ subTotal = 0, current = null }) {
const { last_quote_number } = useSelector(selectFinanceSettings);

if (!last_quote_number) {
return <></>;
}

return <LoadQuoteForm subTotal={subTotal} current={current} />;
}

function LoadQuoteForm({ subTotal = 0, current = null }) {
const { last_quote_number } = useSelector(selectFinanceSettings);
const [lastNumber, setLastNumber] = useState(() => last_quote_number + 1);

export default function QuoteForm({ subTotal = 0, current = null }) {
const [total, setTotal] = useState(0);
const [taxRate, setTaxRate] = useState(0);
const [taxTotal, setTaxTotal] = useState(0);
Expand All @@ -25,9 +40,10 @@ export default function QuoteForm({ subTotal = 0, current = null }) {

useEffect(() => {
if (current) {
const { taxRate = 0, year } = current;
const { taxRate = 0, year, number } = current;
setTaxRate(taxRate);
setCurrentYear(year);
setLastNumber(number);
}
}, [current]);
useEffect(() => {
Expand Down Expand Up @@ -68,7 +84,7 @@ export default function QuoteForm({ subTotal = 0, current = null }) {
<Form.Item
label="Number"
name="number"
initialValue={1}
initialValue={lastNumber}
rules={[
{
required: true,
Expand Down

0 comments on commit 615d11d

Please sign in to comment.