Compare commits

...

22 Commits

Author SHA1 Message Date
Ahmed Bouhuolia
532ad61500 Merge pull request #169 from bigcapitalhq/abouolia-patch-1
Rename writeInvoicesJEntries.ts to WriteInvoicesJEntries.ts
2023-06-19 23:03:25 +02:00
Ahmed Bouhuolia
a44d779670 Rename writeInvoicesJEntries.ts to WriteInvoicesJEntries.ts 2023-06-19 23:00:22 +02:00
Ahmed Bouhuolia
ab5f9f50d0 chore: update CHANGELOG file 2023-06-19 22:58:33 +02:00
Ahmed Bouhuolia
f3f10db6db chore: change the default BASE_URL env var value 2023-06-19 22:56:58 +02:00
Ahmed Bouhuolia
de5694681b Merge pull request #168 from bigcapitalhq/abouhuolia/big-30-create-a-new-warehouse-transfer-broken
fix(webapp): warehouses select component
2023-06-19 22:44:56 +02:00
Ahmed Bouhuolia
b1a997c287 fix(webapp): warehouses select component 2023-06-19 22:43:19 +02:00
Ahmed Bouhuolia
3e36146bce Merge pull request #167 from bigcapitalhq/abouhuolia/big-33-sending-emails-on-reset-password-and-registration
fix(server): sending emails on reset password and registration
2023-06-19 16:04:25 +02:00
Ahmed Bouhuolia
db833888c8 Merge pull request #160 from bigcapitalhq/abouhuolia/big-17-issue-in-manual-journal-placeholder-text
fix(webapp): manual journal placeholder text
2023-06-19 16:02:12 +02:00
Ahmed Bouhuolia
c415e3d693 Merge pull request #161 from bigcapitalhq/abouhuolia/big-32-sidebar
fix(webapp): rename sidebar localization keys names to be keyword path
2023-06-19 16:01:43 +02:00
Ahmed Bouhuolia
e145eabf02 Merge pull request #162 from bigcapitalhq/abouhuolia/big-22-make-the-remove-line-text-to-be-in-red
fix(webapp): change the remove line option text to be red to intent as danger action
2023-06-19 16:00:54 +02:00
Ahmed Bouhuolia
caab21647d Merge pull request #159 from bigcapitalhq/abouhuolia/big-24-adjustment-type-options-do-not-show-up-2
fix(webapp): adjustment type options do not show up
2023-06-19 16:00:20 +02:00
Ahmed Bouhuolia
98528e9e5b Merge pull request #158 from bigcapitalhq/abouhuolia/big-26-add-inventory-adjustment-option-to-the-item-drawer
feat(webapp): add Inventory Adjustment option to the item drawer
2023-06-19 15:59:11 +02:00
Ahmed Bouhuolia
b993fad37f fix(webapp): change the min password length of reset password 2023-06-19 15:55:20 +02:00
Ahmed Bouhuolia
94ea44b58e fix(server): change the reigster min password length 2023-06-19 15:55:06 +02:00
Ahmed Bouhuolia
877a57043a fix(server): sending emails on reset password and registration 2023-06-19 15:36:18 +02:00
Ahmed Bouhuolia
70415d1d63 fix(webapp): change the remove line option text to be red to intent as danger action 2023-06-15 20:49:23 +02:00
Ahmed Bouhuolia
ef2d1977d6 fix(webapp): rename sidebar localization keys names to be keyword path 2023-06-15 20:12:31 +02:00
Ahmed Bouhuolia
46ea26891d fix(webapp): manual journal placeholder text 2023-06-15 20:08:39 +02:00
Ahmed Bouhuolia
f750cede89 fix(webapp): adjustment type options do not show up 2023-06-15 20:00:34 +02:00
Ahmed Bouhuolia
e5d0f16096 feat(webapp): add Inventory Adjustment option to the item drawer 2023-06-15 19:49:23 +02:00
Ahmed Bouhuolia
706694c768 Merge pull request #157 from bigcapitalhq/abouhuolia/big-23-payment-made-details-drawer-does-not-show-up-3
fix(webapp): use all drawers names from common enum object
2023-06-14 21:53:55 +02:00
Ahmed Bouhuolia
d1a09e3b15 fix(webapp): use all drawers name from common enum object 2023-06-14 19:51:14 +02:00
133 changed files with 643 additions and 1450 deletions

View File

@@ -29,7 +29,7 @@ TENANT_DB_NAME_PERFIX=bigcapital_tenant_
# TENANT_DB_CHARSET=
# Application
BASE_URL=https://bigcapital.ly
BASE_URL=http://example.com
JWT_SECRET=b0JDZW56RnV6aEthb0RGPXVEcUI
# Jobs MongoDB

View File

@@ -2,6 +2,30 @@
All notable changes to Bigcapital server-side will be in this file.
# [0.9.8] - 19-06-2023
`bigcapitalhq/webapp`
* add: Inventory Adjustment option to the item drawer by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/158
* fix: use all drawers names from common enum object by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/157
* fix: adjustment type options do not show up by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/159
* fix: change the remove line text to be red to intent as a danger action by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/162
* fix: rename sidebar localization keys names to be keyword path by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/161
* fix: manual journal placeholder text by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/160
* fix: warehouses select component by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/168
`bigcapitalhq/server`
* fix: sending emails on reset password and registration by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/167
## [0.9.7] - 14-06-2023
`@bigcapital/webapp`
* fix: change the footer links of onboarding pages by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/139
`@bigcapital/server`
* fix: expense transaction journal entries by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/155
## [0.9.6] - 12-06-2023
`@bigcapital/webapp`

View File

@@ -92,6 +92,7 @@ export default class AuthenticationController extends BaseController {
check('password')
.exists()
.isString()
.isLength({ min: 6 })
.trim()
.escape()
.isLength({ max: DATATYPES_LENGTH.STRING }),
@@ -106,7 +107,7 @@ export default class AuthenticationController extends BaseController {
return [
check('password')
.exists()
.isLength({ min: 5 })
.isLength({ min: 6 })
.custom((value, { req }) => {
if (value !== req.body.confirm_password) {
throw new Error("Passwords don't match");

View File

@@ -95,16 +95,15 @@ module.exports = {
* JWT secret.
*/
jwtSecret: process.env.JWT_SECRET,
/**
*
*/
resetPasswordSeconds: 600,
/**
*
* Application base URL.
*/
customerSuccess: {
email: 'success@bigcapital.ly',
phoneNumber: '(218) 92 791 8381',
},
baseURL: process.env.BASE_URL,
/**
@@ -137,16 +136,6 @@ module.exports = {
},
},
/**
* Users registeration configuration.
*/
registration: {
countries: {
whitelist: ['LY'],
blacklist: [],
},
},
/**
* Sign-up restrictions
*/
@@ -167,8 +156,6 @@ module.exports = {
browserWSEndpoint: process.env.BROWSER_WS_ENDPOINT,
},
protocol: '',
hostname: '',
scheduleComputeItemCost: 'in 5 seconds',
/**

View File

@@ -1,38 +1,34 @@
import { Container, Inject } from 'typedi';
import AuthenticationService from '@/services/Authentication/AuthApplication';
import { Container } from 'typedi';
import AuthenticationMailMesssages from '@/services/Authentication/AuthenticationMailMessages';
export default class WelcomeEmailJob {
export default class ResetPasswordEmailJob {
/**
* Constructor method.
* @param {Agenda} agenda
* @param {Agenda} agenda
*/
constructor(agenda) {
agenda.define(
'reset-password-mail',
{ priority: 'high' },
this.handler.bind(this),
this.handler.bind(this)
);
}
/**
* Handle send welcome mail job.
* @param {Job} job
* @param {Function} done
* @param {Job} job
* @param {Function} done
*/
public async handler(job, done: Function): Promise<void> {
const { data } = job.attrs;
const { user, token } = data;
const Logger = Container.get('logger');
const authService = Container.get(AuthenticationService);
const authService = Container.get(AuthenticationMailMesssages);
Logger.info(`[send_reset_password] started.`, { data });
try {
await authService.mailMessages.sendResetPasswordMessage(user, token);
Logger.info(`[send_reset_password] finished.`, { data });
done()
await authService.sendResetPasswordMessage(user, token);
done();
} catch (error) {
Logger.error(`[send_reset_password] error.`, { data, error });
console.log(error);
done(error);
}
}

View File

@@ -1,22 +0,0 @@
import { Container } from 'typedi';
export default class SmsNotification {
constructor(agenda) {
agenda.define('sms-notification', { priority: 'high' }, this.handler);
}
/**
*
* @param {Job}job
*/
async handler(job) {
const { message, to } = job.attrs.data;
const smsClient = Container.get('SMSClient');
try {
await smsClient.sendMessage(to, message);
} catch (error) {
done(e);
}
}
}

View File

@@ -1,35 +0,0 @@
import { Container, Inject } from 'typedi';
import AuthenticationService from '@/services/Authentication/AuthApplication';
export default class WelcomeSMSJob {
/**
* Constructor method.
* @param {Agenda} agenda
*/
constructor(agenda) {
agenda.define('welcome-sms', { priority: 'high' }, this.handler);
}
/**
* Handle send welcome mail job.
* @param {Job} job
* @param {Function} done
*/
public async handler(job, done: Function): Promise<void> {
const { tenant, user } = job.attrs.data;
const Logger = Container.get('logger');
const authService = Container.get(AuthenticationService);
Logger.info(`[welcome_sms] started: ${job.attrs.data}`);
try {
await authService.smsMessages.sendWelcomeMessage(tenant, user);
Logger.info(`[welcome_sms] finished`, { tenant, user });
done();
} catch (error) {
Logger.info(`[welcome_sms] error`, { error, tenant, user });
done(error);
}
}
}

View File

@@ -1,39 +0,0 @@
import { Container } from 'typedi';
import AuthenticationService from '@/services/Authentication/AuthApplication';
export default class WelcomeEmailJob {
/**
* Constructor method.
* @param {Agenda} agenda -
*/
constructor(agenda) {
// Welcome mail and SMS message.
agenda.define(
'welcome-email',
{ priority: 'high' },
this.handler.bind(this),
);
}
/**
* Handle send welcome mail job.
* @param {Job} job
* @param {Function} done
*/
public async handler(job, done: Function): Promise<void> {
const { organizationId, user } = job.attrs.data;
const Logger: any = Container.get('logger');
const authService = Container.get(AuthenticationService);
Logger.info(`[welcome_mail] started: ${job.attrs.data}`);
try {
await authService.mailMessages.sendWelcomeMessage(user, organizationId);
Logger.info(`[welcome_mail] finished: ${job.attrs.data}`);
done();
} catch (error) {
Logger.error(`[welcome_mail] error: ${job.attrs.data}, error: ${error}`);
done(error);
}
}
}

View File

@@ -31,7 +31,6 @@ import OrgBuildSmsNotificationSubscriber from '@/subscribers/Organization/BuildS
import PurgeUserAbilityCache from '@/services/Users/PurgeUserAbilityCache';
import ResetLoginThrottleSubscriber from '@/subscribers/Authentication/ResetLoginThrottle';
import AuthenticationSubscriber from '@/subscribers/Authentication/SendResetPasswordMail';
import AuthSendWelcomeMailSubscriber from '@/subscribers/Authentication/SendWelcomeMail';
import PurgeAuthorizedUserOnceRoleMutate from '@/services/Roles/PurgeAuthorizedUser';
import SendSmsNotificationToCustomer from '@/subscribers/SaleInvoices/SendSmsNotificationToCustomer';
import SendSmsNotificationSaleReceipt from '@/subscribers/SaleReceipt/SendSmsNotificationToCustomer';
@@ -120,7 +119,6 @@ export const susbcribers = () => {
PurgeUserAbilityCache,
ResetLoginThrottleSubscriber,
AuthenticationSubscriber,
AuthSendWelcomeMailSubscriber,
PurgeAuthorizedUserOnceRoleMutate,
SendSmsNotificationToCustomer,
SendSmsNotificationSaleReceipt,

View File

@@ -1,24 +1,18 @@
import Agenda from 'agenda';
import WelcomeEmailJob from 'jobs/welcomeEmail';
import WelcomeSMSJob from 'jobs/WelcomeSMS';
import ResetPasswordMailJob from 'jobs/ResetPasswordMail';
import ComputeItemCost from 'jobs/ComputeItemCost';
import RewriteInvoicesJournalEntries from 'jobs/writeInvoicesJEntries';
import RewriteInvoicesJournalEntries from 'jobs/WriteInvoicesJEntries';
import UserInviteMailJob from 'jobs/UserInviteMail';
import OrganizationSetupJob from 'jobs/OrganizationSetup';
import OrganizationUpgrade from 'jobs/OrganizationUpgrade';
import SmsNotification from 'jobs/SmsNotification';
export default ({ agenda }: { agenda: Agenda }) => {
new WelcomeEmailJob(agenda);
new ResetPasswordMailJob(agenda);
new WelcomeSMSJob(agenda);
new UserInviteMailJob(agenda);
new ComputeItemCost(agenda);
new RewriteInvoicesJournalEntries(agenda);
new OrganizationSetupJob(agenda);
new OrganizationUpgrade(agenda);
new SmsNotification(agenda);
agenda.start();
};

View File

@@ -5,59 +5,24 @@ import Mail from '@/lib/Mail';
@Service()
export default class AuthenticationMailMesssages {
/**
* Sends welcome message.
* @param {ISystemUser} user - The system user.
* @param {string} organizationName -
* @return {Promise<void>}
*/
async sendWelcomeMessage(
user: ISystemUser,
organizationId: string
): Promise<void> {
const root = __dirname + '/../../../views/images/bigcapital.png';
const mail = new Mail()
.setView('mail/Welcome.html')
.setSubject('Welcome to Bigcapital')
.setTo(user.email)
.setAttachments([
{
filename: 'bigcapital.png',
path: root,
cid: 'bigcapital_logo',
},
])
.setData({
firstName: user.firstName,
organizationId,
successPhoneNumber: config.customerSuccess.phoneNumber,
successEmail: config.customerSuccess.email,
});
await mail.send();
}
/**
* Sends reset password message.
* @param {ISystemUser} user - The system user.
* @param {string} token - Reset password token.
* @return {Promise<void>}
*/
async sendResetPasswordMessage(
public async sendResetPasswordMessage(
user: ISystemUser,
token: string
): Promise<void> {
const root = __dirname + '/../../../views/images/bigcapital.png';
const mail = new Mail()
await new Mail()
.setSubject('Bigcapital - Password Reset')
.setView('mail/ResetPassword.html')
.setTo(user.email)
.setAttachments([
{
filename: 'bigcapital.png',
path: root,
path: `${global.__views_dir}/images/bigcapital.png`,
cid: 'bigcapital_logo',
},
])
@@ -65,9 +30,7 @@ export default class AuthenticationMailMesssages {
resetPasswordUrl: `${config.baseURL}/auth/reset_password/${token}`,
first_name: user.firstName,
last_name: user.lastName,
contact_us_email: config.contactUsMail,
});
await mail.send();
})
.send();
}
}

View File

@@ -1,19 +0,0 @@
import { Service, Inject } from 'typedi';
import { ISystemUser, ITenant } from '@/interfaces';
@Service()
export default class AuthenticationSMSMessages {
@Inject('SMSClient')
smsClient: any;
/**
* Sends welcome sms message.
* @param {ITenant} tenant
* @param {ISystemUser} user
*/
sendWelcomeMessage(tenant: ITenant, user: ISystemUser) {
const message: string = `Hi ${user.firstName}, Welcome to Bigcapital, You've joined the new workspace, if you need any help please don't hesitate to contact us.`;
return this.smsClient.sendMessage(user.phoneNumber, message);
}
}

View File

@@ -4,7 +4,7 @@ import events from '@/subscribers/events';
@Service()
export default class AuthenticationSubscriber {
@Inject('agenda')
agenda: any;
private agenda: any;
/**
* Attaches events with handlers.

View File

@@ -1,28 +0,0 @@
import { Service, Inject } from 'typedi';
import events from '@/subscribers/events';
@Service()
export default class AuthSendWelcomeMailSubscriber {
@Inject('agenda')
agenda: any;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(events.auth.signUp, this.sendWelcomeEmailOnceUserRegister);
}
/**
* Sends welcome email once the user register.
*/
private sendWelcomeEmailOnceUserRegister = async (payload) => {
const { tenant, user } = payload;
// Send welcome mail to the user.
await this.agenda.now('welcome-email', {
organizationId: tenant.organizationId,
user,
});
};
}

View File

@@ -1,411 +0,0 @@
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Bigcapital | Reset your password</title>
<style>
/* -------------------------------------
GLOBAL RESETS
------------------------------------- */
/*All the styling goes here*/
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
width: 100%; }
table td {
font-family: sans-serif;
font-size: 14px;
vertical-align: top;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
.body {
background-color: #f6f6f6;
width: 100%;
}
/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink down on a phone or something */
.container {
display: block;
margin: 0 auto !important;
/* makes it centered */
max-width: 580px;
padding: 10px;
width: 580px;
}
/* This should also be a block element, so that it will fill 100% of the .container */
.content {
box-sizing: border-box;
display: block;
margin: 0 auto;
max-width: 580px;
padding: 10px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #ffffff;
border-radius: 3px;
width: 100%;
}
.wrapper {
box-sizing: border-box;
padding: 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #000000;
font-family: sans-serif;
font-weight: bold;
line-height: 1.4;
margin: 0;
margin-bottom: 0;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
}
a {
color: #3498db;
text-decoration: underline;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
.btn > tbody > tr > td {
padding-bottom: 15px; }
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 5px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #3498db;
border-radius: 5px;
box-sizing: border-box;
color: #3498db;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 25px;
text-decoration: none;
text-transform: capitalize;
}
.btn-primary table td {
background-color: #2d95fd;
}
.btn-primary a {
background-color: #2d95fd;
border-color: #2d95fd;
color: #ffffff;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.mb4{
margin-bottom: 4rem;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
mso-hide: all;
visibility: hidden;
width: 0;
}
.powered-by a {
text-decoration: none;
}
hr {
border: 0;
border-bottom: 1px solid #f6f6f6;
margin: 20px 0;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class=body] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class=body] p,
table[class=body] ul,
table[class=body] ol,
table[class=body] td,
table[class=body] span,
table[class=body] a {
font-size: 16px !important;
}
table[class=body] .wrapper,
table[class=body] .article {
padding: 10px !important;
}
table[class=body] .content {
padding: 0 !important;
}
table[class=body] .container {
padding: 0 !important;
width: 100% !important;
}
table[class=body] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class=body] .btn table {
width: 100% !important;
}
table[class=body] .btn a {
width: 100% !important;
}
table[class=body] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
#MessageViewBody a {
color: inherit;
text-decoration: none;
font-size: inherit;
font-family: inherit;
font-weight: inherit;
line-height: inherit;
}
.btn-primary table td:hover {
background-color: #004dd0 !important;
}
.btn-primary a:hover {
background-color: #004dd0 !important;
border-color: #004dd0 !important;
}
}
[data-icon="bigcapital"] path {
fill: #004dd0;
}
[data-icon='bigcapital'] .path-1,
[data-icon='bigcapital'] .path-13 {
fill: #2d95fd;
}
</style>
</head>
<body class="">
<span class="preheader">This is preheader text. Some clients will show this text as a preview.</span>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="body">
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<!-- START CENTERED WHITE CONTAINER -->
<table role="presentation" class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p class="align-center">
<svg data-icon="bigcapital" class="bigcapital" width="190" height="37" viewBox="0 0 309.09 42.89"><desc>bigcapital</desc><path d="M56,3.16,61.33,8.5,31.94,37.9l-5.35-5.35Z" class="path-1" fill-rule="evenodd"></path><path d="M29.53,6.94l5.35,5.34L5.49,41.67.14,36.33l15.8-15.8Z" class="path-2" fill-rule="evenodd"></path><path d="M94.36,38.87H79.62v-31H94c6.33,0,10.22,3.15,10.22,8V16a7.22,7.22,0,0,1-4.07,6.69c3.58,1.37,5.8,3.45,5.8,7.61v.09C106,36,101.35,38.87,94.36,38.87Zm3.1-21.81c0-2-1.59-3.19-4.47-3.19H86.26v6.55h6.29c3,0,4.91-1,4.91-3.28Zm1.72,12.39c0-2.08-1.54-3.37-5-3.37H86.26V32.9h8.1c3,0,4.82-1.06,4.82-3.36Z" class="path-3" fill-rule="evenodd"></path><path d="M110.56,12.54v-6h7.08v6Zm.18,26.33V15.15h6.72V38.87Z" class="path-4" fill-rule="evenodd"></path><path d="M134,46a22.55,22.55,0,0,1-10.49-2.47l2.3-5a15.52,15.52,0,0,0,8,2.17c4.61,0,6.78-2.21,6.78-6.46V33.08c-2,2.39-4.16,3.85-7.75,3.85-5.53,0-10.53-4-10.53-11.07v-.09c0-7.08,5.09-11.06,10.53-11.06a9.63,9.63,0,0,1,7.66,3.54v-3.1h6.72V33.52C147.2,42.46,142.78,46,134,46Zm6.6-20.27a5.79,5.79,0,0,0-11.56,0v.09a5.42,5.42,0,0,0,5.76,5.49,5.49,5.49,0,0,0,5.8-5.49Z" class="path-5" fill-rule="evenodd"></path><path d="M164,39.41a12.11,12.11,0,0,1-12.35-12.26v-.09a12.18,12.18,0,0,1,12.44-12.35c4.47,0,7.25,1.5,9.47,4l-4.12,4.43a6.93,6.93,0,0,0-5.4-2.61c-3.36,0-5.75,3-5.75,6.46v.09c0,3.63,2.34,6.55,6,6.55,2.26,0,3.8-1,5.44-2.53l3.94,4A12,12,0,0,1,164,39.41Z" class="path-6" fill-rule="evenodd"></path><path d="M191.51,38.87V36.31a9.15,9.15,0,0,1-7.17,3c-4.47,0-8.15-2.57-8.15-7.26V32c0-5.18,3.94-7.57,9.56-7.57a16.74,16.74,0,0,1,5.8,1V25c0-2.79-1.72-4.34-5.09-4.34a17.57,17.57,0,0,0-6.55,1.28l-1.68-5.13a21,21,0,0,1,9.21-1.9c7.34,0,10.57,3.8,10.57,10.22V38.87Zm.13-9.55a10.3,10.3,0,0,0-4.29-.89c-2.88,0-4.65,1.15-4.65,3.27v.09c0,1.82,1.5,2.88,3.67,2.88,3.15,0,5.27-1.73,5.27-4.16Z" class="path-7" fill-rule="evenodd"></path><path d="M217.49,39.32a9.1,9.1,0,0,1-7.39-3.54V46h-6.73V15.15h6.73v3.41a8.7,8.7,0,0,1,7.39-3.85c5.53,0,10.8,4.34,10.8,12.26v.09C228.29,35,223.11,39.32,217.49,39.32ZM221.56,27c0-3.94-2.66-6.55-5.8-6.55S210,23,210,27v.09c0,3.94,2.61,6.55,5.75,6.55s5.8-2.57,5.8-6.55Z" class="path-8" fill-rule="evenodd"></path><path d="M232.93,12.54v-6H240v6Zm.18,26.33V15.15h6.73V38.87Z" class="path-9" fill-rule="evenodd"></path><path d="M253.73,39.27c-4.11,0-6.9-1.63-6.9-7.12V20.91H244V15.15h2.83V9.09h6.73v6.06h5.57v5.76h-5.57V31c0,1.55.66,2.3,2.16,2.3A6.84,6.84,0,0,0,259,32.5v5.4A9.9,9.9,0,0,1,253.73,39.27Z" class="path-10" fill-rule="evenodd"></path><path d="M277.55,38.87V36.31a9.15,9.15,0,0,1-7.18,3c-4.46,0-8.14-2.57-8.14-7.26V32c0-5.18,3.94-7.57,9.56-7.57a16.74,16.74,0,0,1,5.8,1V25c0-2.79-1.73-4.34-5.09-4.34A17.57,17.57,0,0,0,266,21.92l-1.68-5.13a20.94,20.94,0,0,1,9.2-1.9c7.35,0,10.58,3.8,10.58,10.22V38.87Zm.13-9.55a10.31,10.31,0,0,0-4.3-.89c-2.87,0-4.64,1.15-4.64,3.27v.09c0,1.82,1.5,2.88,3.67,2.88,3.14,0,5.27-1.73,5.27-4.16Z" class="path-11" fill-rule="evenodd"></path><path d="M289.72,38.87V6.57h6.72v32.3Z" class="path-12" fill-rule="evenodd"></path><path d="M302.06,38.87V31.79h7.17v7.08Z" class="path-13" fill-rule="evenodd"></path></svg>
</p>
<hr />
<p class="align-center">
<h3>License Code</h3>
</p>
<p class="mgb-1x">
<h1>{{ licenseCode }}</h1>
</p>
<p class="email-note">
This is an automatically generated email please do not reply to
this email. If you face any issues, please contact us at <a href="mailto:{{ successEmail }}">{{ successEmail }}</a> or call <u>{{ successPhoneNumber }}</u></p>
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
<!-- END CENTERED WHITE CONTAINER -->
<!-- START FOOTER -->
<div class="footer">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block powered-by">
Powered by <a href="http://htmlemail.io">Bigcapital.com</a>.
</td>
</tr>
</table>
</div>
<!-- END FOOTER -->
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@@ -391,10 +391,8 @@
</tr>
</tbody>
</table>
<p>If you did not make this request, please contact us or ignore this message.</p>
<p class="email-note">
This is an automatically generated email please do not reply to
this email. If you face any issues, please contact us at {{ contact_us_email }}</p>
<p>If this was a mistake, just ignore this email and nothing will happen.</p>
<p class="email-note">This is an automatically generated email please do not reply to this email.</p>
</td>
</tr>
</table>

View File

@@ -1,407 +0,0 @@
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Bigcapital | Reset your password</title>
<style>
/* -------------------------------------
GLOBAL RESETS
------------------------------------- */
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
width: 100%; }
table td {
font-family: sans-serif;
font-size: 14px;
vertical-align: top;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
.body {
background-color: #f6f6f6;
width: 100%;
}
/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink down on a phone or something */
.container {
display: block;
margin: 0 auto !important;
/* makes it centered */
max-width: 580px;
padding: 10px;
width: 580px;
}
/* This should also be a block element, so that it will fill 100% of the .container */
.content {
box-sizing: border-box;
display: block;
margin: 0 auto;
max-width: 580px;
padding: 10px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #ffffff;
border-radius: 3px;
width: 100%;
}
.wrapper {
box-sizing: border-box;
padding: 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #000000;
font-family: sans-serif;
font-weight: bold;
line-height: 1.4;
margin: 0;
margin-bottom: 0;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
}
a {
color: #3498db;
text-decoration: underline;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
.btn > tbody > tr > td {
padding-bottom: 15px; }
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 5px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #3498db;
border-radius: 5px;
box-sizing: border-box;
color: #3498db;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 25px;
text-decoration: none;
text-transform: capitalize;
}
.btn-primary table td {
background-color: #2d95fd;
}
.btn-primary a {
background-color: #2d95fd;
border-color: #2d95fd;
color: #ffffff;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.mb4{
margin-bottom: 4rem;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
mso-hide: all;
visibility: hidden;
width: 0;
}
.powered-by a {
text-decoration: none;
}
hr {
border: 0;
border-bottom: 1px solid #f6f6f6;
margin: 20px 0;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class=body] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class=body] p,
table[class=body] ul,
table[class=body] ol,
table[class=body] td,
table[class=body] span,
table[class=body] a {
font-size: 16px !important;
}
table[class=body] .wrapper,
table[class=body] .article {
padding: 10px !important;
}
table[class=body] .content {
padding: 0 !important;
}
table[class=body] .container {
padding: 0 !important;
width: 100% !important;
}
table[class=body] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class=body] .btn table {
width: 100% !important;
}
table[class=body] .btn a {
width: 100% !important;
}
table[class=body] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
#MessageViewBody a {
color: inherit;
text-decoration: none;
font-size: inherit;
font-family: inherit;
font-weight: inherit;
line-height: inherit;
}
.btn-primary table td:hover {
background-color: #004dd0 !important;
}
.btn-primary a:hover {
background-color: #004dd0 !important;
border-color: #004dd0 !important;
}
}
[data-icon="bigcapital"] path {
fill: #004dd0;
}
[data-icon='bigcapital'] .path-1,
[data-icon='bigcapital'] .path-13 {
fill: #2d95fd;
}
</style>
</head>
<body class="">
<span class="preheader">This is preheader text. Some clients will show this text as a preview.</span>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="body">
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<!-- START CENTERED WHITE CONTAINER -->
<table role="presentation" class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p class="align-center">
<img src="cid:bigcapital_logo" />
</p>
<hr />
<p class="align-center">
<h3>Hi {{ firstName }}, Welcome to Bigcapital, </h3>
</p>
<p class="mgb-1x">
Your organization Id: <strong>{{ organizationId }}</strong>
</p>
<p class="mgb-1x">We are available to help you get started and answer any questions you may have. You can also email <a href="mailto:{{ successEmail }}">{{ successEmail }}</a> or call <u>{{ successPhoneNumber }}</u> about your set-up questions.</p>
<p class="mgb-2-5x">Thank you for trusting Bigcapital Software for your business needs. We look forward to serving you!</p>
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
<!-- END CENTERED WHITE CONTAINER -->
<!-- START FOOTER -->
<div class="footer">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block powered-by">
Made by Bigcapital Technologies, Inc
</td>
</tr>
</table>
</div>
<!-- END FOOTER -->
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@@ -4,6 +4,7 @@ import * as R from 'ramda';
import { ButtonLink } from '../Button';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { DRAWERS } from '@/constants/drawers';
function CustomerDrawerLinkComponent({
// #ownProps
@@ -16,7 +17,7 @@ function CustomerDrawerLinkComponent({
}) {
// Handle view customer drawer.
const handleCustomerDrawer = (event) => {
openDrawer('customer-detail-drawer', { customerId });
openDrawer(DRAWERS.CUSTOMER_DETAILS, { customerId });
event.preventDefault();
};

View File

@@ -31,28 +31,28 @@ import { DRAWERS } from '@/constants/drawers';
export default function DrawersContainer() {
return (
<div>
<AccountDrawer name={DRAWERS.ACCOUNT} />
<ManualJournalDrawer name={DRAWERS.JOURNAL} />
<ExpenseDrawer name={DRAWERS.EXPENSE} />
<BillDrawer name={DRAWERS.BILL} />
<InvoiceDetailDrawer name={DRAWERS.INVOICE} />
<EstimateDetailDrawer name={DRAWERS.ESTIMATE} />
<ReceiptDetailDrawer name={DRAWERS.RECEIPT} />
<PaymentReceiveDetailDrawer name={DRAWERS.PAYMENT_RECEIVE} />
<PaymentMadeDetailDrawer name={DRAWERS.PAYMENT_MADE} />
<ItemDetailDrawer name={DRAWERS.ITEM} />
<CustomerDetailsDrawer name={DRAWERS.CUSTOMER} />
<VendorDetailsDrawer name={DRAWERS.VENDOR} />
<InventoryAdjustmentDetailDrawer name={DRAWERS.INVENTORY_ADJUSTMENT} />
<CashflowTransactionDetailDrawer name={DRAWERS.CASHFLOW_TRNASACTION} />
<AccountDrawer name={DRAWERS.ACCOUNT_DETAILS} />
<ManualJournalDrawer name={DRAWERS.JOURNAL_DETAILS} />
<ExpenseDrawer name={DRAWERS.EXPENSE_DETAILS} />
<BillDrawer name={DRAWERS.BILL_DETAILS} />
<InvoiceDetailDrawer name={DRAWERS.INVOICE_DETAILS} />
<EstimateDetailDrawer name={DRAWERS.ESTIMATE_DETAILS} />
<ReceiptDetailDrawer name={DRAWERS.RECEIPT_DETAILS} />
<PaymentReceiveDetailDrawer name={DRAWERS.PAYMENT_RECEIVE_DETAILS} />
<PaymentMadeDetailDrawer name={DRAWERS.PAYMENT_MADE_DETAILS} />
<ItemDetailDrawer name={DRAWERS.ITEM_DETAILS} />
<CustomerDetailsDrawer name={DRAWERS.CUSTOMER_DETAILS} />
<VendorDetailsDrawer name={DRAWERS.VENDOR_DETAILS} />
<InventoryAdjustmentDetailDrawer name={DRAWERS.INVENTORY_ADJUSTMENT_DETAILS} />
<CashflowTransactionDetailDrawer name={DRAWERS.CASHFLOW_TRNASACTION_DETAILS} />
<QuickCreateCustomerDrawer name={DRAWERS.QUICK_CREATE_CUSTOMER} />
<QuickCreateItemDrawer name={DRAWERS.QUICK_CREATE_ITEM} />
<QuickWriteVendorDrawer name={DRAWERS.QUICK_WRITE_VENDOR} />
<CreditNoteDetailDrawer name={DRAWERS.CREDIT_NOTE} />
<VendorCreditDetailDrawer name={DRAWERS.VENDOR_CREDIT} />
<RefundCreditNoteDetailDrawer name={DRAWERS.REFUND_CREDIT_NOTE} />
<RefundVendorCreditDetailDrawer name={DRAWERS.REFUND_VENDOR_CREDIT} />
<WarehouseTransferDetailDrawer name={DRAWERS.WAREHOUSE_TRANSFER} />
<CreditNoteDetailDrawer name={DRAWERS.CREDIT_NOTE_DETAILS} />
<VendorCreditDetailDrawer name={DRAWERS.VENDOR_CREDIT_DETAILS} />
<RefundCreditNoteDetailDrawer name={DRAWERS.REFUND_CREDIT_NOTE_DETAILS} />
<RefundVendorCreditDetailDrawer name={DRAWERS.REFUND_VENDOR_CREDIT_DETAILS} />
<WarehouseTransferDetailDrawer name={DRAWERS.WAREHOUSE_TRANSFER_DETAILS} />
</div>
);
}

View File

@@ -4,6 +4,7 @@ import * as R from 'ramda';
import { ButtonLink } from '../Button';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { DRAWERS } from '@/constants/drawers';
function VendorDrawerLinkComponent({
// #ownProps
@@ -16,7 +17,7 @@ function VendorDrawerLinkComponent({
}) {
// Handle view customer drawer.
const handleVendorDrawer = (event) => {
openDrawer('vendor-detail-drawer', { vendorId });
openDrawer(DRAWERS.VENDOR_DETAILS, { vendorId });
event.preventDefault();
};

View File

@@ -1,75 +1,21 @@
// @ts-nocheck
import React from 'react';
import { MenuItem, Button } from '@blueprintjs/core';
import { FSelect } from '../Forms';
/**
*
* @param {*} query
* @param {*} warehouse
* @param {*} _index
* @param {*} exactMatch
* @returns
*/
const warehouseItemPredicate = (query, warehouse, _index, exactMatch) => {
const normalizedTitle = warehouse.name.toLowerCase();
const normalizedQuery = query.toLowerCase();
if (exactMatch) {
return normalizedTitle === normalizedQuery;
} else {
return (
`${warehouse.code}. ${normalizedTitle}`.indexOf(normalizedQuery) >= 0
);
}
};
/**
*
* @param {*} film
* @param {*} param1
* @returns
*/
const warehouseItemRenderer = (
warehouse,
{ handleClick, modifiers, query },
) => {
const text = `${warehouse.name}`;
return (
<MenuItem
active={modifiers.active}
disabled={modifiers.disabled}
label={warehouse.code}
key={warehouse.id}
onClick={handleClick}
text={text}
/>
);
};
const warehouseSelectProps = {
itemPredicate: warehouseItemPredicate,
itemRenderer: warehouseItemRenderer,
valueAccessor: 'id',
labelAccessor: 'name',
};
/**
*
* Warehouse select field.
* @param {*} param0
* @returns
*/
export function WarehouseSelect({ warehouses, ...rest }) {
return <FSelect {...warehouseSelectProps} {...rest} items={warehouses} />;
}
/**
*
* @param {*} param0
* @returns
*/
export function WarehouseSelectButton({ label, ...rest }) {
return <Button text={label} />;
}
return (
<FSelect
valueAccessor={'id'}
labelAccessor={'code'}
textAccessor={'name'}
popoverProps={{ minimal: true, usePortal: true, inline: false }}
{...rest}
items={warehouses}
/>
);
}

View File

@@ -1,7 +0,0 @@
// @ts-nocheck
import intl from 'react-intl-universal';
export default [
{ name: intl.get('decrement'), value: 'decrement' },
{ name: intl.get('increment'), value: 'increment' },
]

View File

@@ -1,25 +1,25 @@
// @ts-nocheck
export enum DRAWERS {
ACCOUNT = 'account-drawer',
JOURNAL = 'journal-drawer',
EXPENSE = 'expense-drawer',
BILL = 'bill-drawer',
INVOICE = 'invoice-detail-drawer',
RECEIPT = 'receipt-detail-drawer',
PAYMENT_RECEIVE = 'payment-receive-detail-drawer',
PAYMENT_MADE = 'payment-made-drawer',
ESTIMATE = 'estimate-detail-drawer',
ITEM = 'item-detail-drawer',
CUSTOMER = 'customer-detail-drawer',
VENDOR = 'vendor-detail-drawer',
INVENTORY_ADJUSTMENT = 'inventory-adjustment-drawer',
CASHFLOW_TRNASACTION = 'cashflow-transaction-drawer',
ACCOUNT_DETAILS = 'account-drawer',
JOURNAL_DETAILS = 'journal-drawer',
EXPENSE_DETAILS = 'expense-drawer',
BILL_DETAILS = 'bill-drawer',
INVOICE_DETAILS = 'invoice-detail-drawer',
RECEIPT_DETAILS = 'receipt-detail-drawer',
PAYMENT_RECEIVE_DETAILS = 'payment-receive-detail-drawer',
PAYMENT_MADE_DETAILS = 'payment-made-drawer',
ESTIMATE_DETAILS = 'estimate-detail-drawer',
ITEM_DETAILS = 'item-detail-drawer',
CUSTOMER_DETAILS = 'customer-detail-drawer',
VENDOR_DETAILS = 'vendor-detail-drawer',
INVENTORY_ADJUSTMENT_DETAILS = 'inventory-adjustment-drawer',
CASHFLOW_TRNASACTION_DETAILS = 'cashflow-transaction-drawer',
QUICK_CREATE_CUSTOMER = 'quick-create-customer',
QUICK_CREATE_ITEM = 'quick-create-item',
QUICK_WRITE_VENDOR = 'quick-write-vendor',
CREDIT_NOTE = 'credit-note-detail-drawer',
VENDOR_CREDIT = 'vendor-credit-detail-drawer',
REFUND_CREDIT_NOTE = 'refund-credit-detail-drawer',
REFUND_VENDOR_CREDIT = 'refund-vendor-detail-drawer',
WAREHOUSE_TRANSFER = 'warehouse-transfer-detail-drawer',
CREDIT_NOTE_DETAILS = 'credit-note-detail-drawer',
VENDOR_CREDIT_DETAILS = 'vendor-credit-detail-drawer',
REFUND_CREDIT_NOTE_DETAILS = 'refund-credit-detail-drawer',
REFUND_VENDOR_CREDIT_DETAILS = 'refund-vendor-detail-drawer',
WAREHOUSE_TRANSFER_DETAILS = 'warehouse-transfer-detail-drawer',
}

View File

@@ -4,7 +4,6 @@ export * from './tableStyle';
export * from './features';
export * from './cellTypes';
export * from './classes';
export * from './adjustmentType';
export * from './cashflowOptions';
export const Align = { Left: 'left', Right: 'right', Center: 'center' };

View File

@@ -31,7 +31,7 @@ export const SidebarMenu = [
// # Homepage
// ---------------
{
text: <T id={'homepage'} />,
text: <T id={'sidebar.homepage'} />,
type: ISidebarMenuItemType.Link,
disabled: false,
href: '/',
@@ -41,20 +41,20 @@ export const SidebarMenu = [
// # Sales & Inventory
// ---------------
{
text: <T id={'sales_inventory'} />,
text: <T id={'sidebar.sales_inventory'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'items'} />,
text: <T id={'sidebar.items'} />,
type: ISidebarMenuItemType.Overlay,
overlayId: ISidebarMenuOverlayIds.Items,
children: [
{
text: <T id={'items'} />,
text: <T id={'sidebar.items'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'items'} />,
text: <T id={'sidebar.items'} />,
href: '/items',
type: ISidebarMenuItemType.Link,
permission: {
@@ -63,7 +63,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'inventory_adjustments'} />,
text: <T id={'sidebar.inventory_adjustments'} />,
href: '/inventory-adjustments',
type: ISidebarMenuItemType.Link,
permission: {
@@ -71,12 +71,6 @@ export const SidebarMenu = [
ability: InventoryAdjustmentAction.View,
},
},
{
text: <T id={'sidebar_warehouse_transfer'} />,
href: '/warehouses-transfers',
type: ISidebarMenuItemType.Link,
feature: Features.Warehouses,
},
{
text: <T id={'category_list'} />,
href: '/items/categories',
@@ -86,31 +80,20 @@ export const SidebarMenu = [
ability: ItemAction.View,
},
},
],
},
{
text: <T id={'New tasks'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'New inventory item'} />,
href: '/items/new',
type: ISidebarMenuItemType.Link,
permission: {
subject: AbilitySubject.Item,
ability: ItemAction.Create,
},
},
{
text: (
<T id={'warehouse_transfer.label.new_warehouse_transfer'} />
),
href: '/warehouses-transfers/new',
text: <T id={'sidebar.warehouse_transfer'} />,
href: '/warehouses-transfers',
type: ISidebarMenuItemType.Link,
feature: Features.Warehouses,
},
],
},
{
text: <T id={'sidebar.new_tasks'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'New service'} />,
text: <T id={'sidebar.new_inventory_item'} />,
href: '/items/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -119,7 +102,16 @@ export const SidebarMenu = [
},
},
{
text: <T id={'New item category'} />,
text: <T id={'sidebar.new_service'} />,
href: '/items/new',
type: ISidebarMenuItemType.Link,
permission: {
subject: AbilitySubject.Item,
ability: ItemAction.Create,
},
},
{
text: <T id={'sidebar.new_item_category'} />,
href: '/items/categories/new',
type: ISidebarMenuItemType.Dialog,
dialogName: 'item-category-form',
@@ -128,6 +120,12 @@ export const SidebarMenu = [
ability: ItemAction.Create,
},
},
{
text: <T id={'sidebar.new_warehouse_transfer'} />,
href: '/warehouses-transfers/new',
type: ISidebarMenuItemType.Link,
feature: Features.Warehouses,
},
],
},
],
@@ -138,16 +136,16 @@ export const SidebarMenu = [
// # Sales
// ---------------
{
text: <T id={'sales'} />,
text: <T id={'sidebar.sales'} />,
type: ISidebarMenuItemType.Overlay,
overlayId: ISidebarMenuOverlayIds.Sales,
children: [
{
text: <T id={'sales'} />,
text: <T id={'sidebar.sales'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'estimates'} />,
text: <T id={'sidebar.estimates'} />,
href: '/estimates',
type: ISidebarMenuItemType.Link,
permission: {
@@ -156,7 +154,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'invoices'} />,
text: <T id={'sidebar.invoices'} />,
href: '/invoices',
type: ISidebarMenuItemType.Link,
permission: {
@@ -165,7 +163,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'receipts'} />,
text: <T id={'sidebar.receipts'} />,
href: '/receipts',
type: ISidebarMenuItemType.Link,
permission: {
@@ -174,12 +172,12 @@ export const SidebarMenu = [
},
},
{
text: <T id={'sidebar_credit_note'} />,
text: <T id={'sidebar.credit_notes'} />,
href: '/credit-notes',
type: ISidebarMenuItemType.Link,
},
{
text: <T id={'payment_receives'} />,
text: <T id={'sidebar.payment_receives'} />,
href: '/payment-receives',
type: ISidebarMenuItemType.Link,
permission: {
@@ -190,11 +188,11 @@ export const SidebarMenu = [
],
},
{
text: <T id={'New tasks'} />,
text: <T id={'sidebar.new_tasks'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'new_estimate'} />,
text: <T id={'sidebar.new_estimate'} />,
href: '/estimates/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -203,7 +201,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'new_invoice'} />,
text: <T id={'sidebar.new_invoice'} />,
href: '/invoices/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -212,7 +210,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'new_receipt'} />,
text: <T id={'sidebar.new_receipt'} />,
href: '/receipts/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -221,12 +219,12 @@ export const SidebarMenu = [
},
},
{
text: <T id={'credit_note.label.new_credit_note'} />,
text: <T id={'sidebar.new_credit_note'} />,
href: '/credit-notes/new',
type: ISidebarMenuItemType.Link,
},
{
text: <T id={'new_payment_receive'} />,
text: <T id={'sidebar.new_payment_receive'} />,
href: '/payment-receives/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -242,12 +240,12 @@ export const SidebarMenu = [
// # Purchases
// ---------------
{
text: <T id={'purchases'} />,
text: <T id={'sidebar.purchases'} />,
type: ISidebarMenuItemType.Overlay,
overlayId: ISidebarMenuOverlayIds.Purchases,
children: [
{
text: <T id={'purchases'} />,
text: <T id={'sidebar.purchases'} />,
type: ISidebarMenuItemType.Group,
children: [
{
@@ -276,11 +274,11 @@ export const SidebarMenu = [
],
},
{
text: <T id={'New tasks'} />,
text: <T id={'sidebar.new_tasks'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'New purchase invoice'} />,
text: <T id={'sidebar.new_purchase_invoice'} />,
href: '/bills/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -289,7 +287,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'vendor_credits.label.new_vendor_credit'} />,
text: <T id={'sidebar.new_vendor_credit'} />,
href: '/vendor-credits/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -298,7 +296,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'new_payment_made'} />,
text: <T id={'sidebar.new_payment_made'} />,
href: '/payment-mades/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -314,16 +312,16 @@ export const SidebarMenu = [
// # Contacts
// ---------------
{
text: <T id={'contacts'} />,
text: <T id={'sidebar.contacts'} />,
type: ISidebarMenuItemType.Overlay,
overlayId: ISidebarMenuOverlayIds.Contacts,
children: [
{
text: <T id={'contacts'} />,
text: <T id={'sidebar.contacts'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'customers'} />,
text: <T id={'sidebar.customers'} />,
href: '/customers',
type: ISidebarMenuItemType.Link,
permission: {
@@ -332,7 +330,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'vendors'} />,
text: <T id={'sidebar.vendors'} />,
href: '/vendors',
type: ISidebarMenuItemType.Link,
permission: {
@@ -343,11 +341,11 @@ export const SidebarMenu = [
],
},
{
text: <T id={'New tasks'} />,
text: <T id={'sidebar.new_tasks'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'new_customer'} />,
text: <T id={'sidebar.new_customer'} />,
href: '/customers/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -356,7 +354,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'new_vendor'} />,
text: <T id={'sidebar.new_vendor'} />,
href: '/vendors/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -372,20 +370,20 @@ export const SidebarMenu = [
// # Accounting
// ---------------
{
text: <T id={'accounting'} />,
text: <T id={'sidebar.accounting'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'financial'} />,
text: <T id={'sidebar.financial'} />,
type: ISidebarMenuItemType.Overlay,
overlayId: ISidebarMenuOverlayIds.Financial,
children: [
{
text: <T id={'financial'} />,
text: <T id={'sidebar.financial'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'accounts_chart'} />,
text: <T id={'sidebar.accounts_chart'} />,
href: '/accounts',
type: ISidebarMenuItemType.Link,
permission: {
@@ -394,7 +392,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'manual_journals'} />,
text: <T id={'sidebar.manual_journals'} />,
href: '/manual-journals',
type: ISidebarMenuItemType.Link,
permission: {
@@ -410,11 +408,11 @@ export const SidebarMenu = [
],
},
{
text: <T id={'New tasks'} />,
text: <T id={'sidebar.new_tasks'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'make_journal_entry'} />,
text: <T id={'sidebar.make_journal_entry'} />,
href: '/make-journal-entry',
type: ISidebarMenuItemType.Link,
permission: {
@@ -441,7 +439,7 @@ export const SidebarMenu = [
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'siebar.cashflow.label_cash_and_bank_accounts'} />,
text: <T id={'sidebar.cash_bank_accounts'} />,
href: '/cashflow-accounts',
type: ISidebarMenuItemType.Link,
permission: {
@@ -452,12 +450,12 @@ export const SidebarMenu = [
],
},
{
text: <T id={'New tasks'} />,
text: <T id={'sidebar.new_tasks'} />,
type: ISidebarMenuItemType.Group,
divider: true,
children: [
{
text: <T id={'cash_flow.label.add_money_in'} />,
text: <T id={'sidebar.add_money_in'} />,
href: '/cashflow-accounts',
type: ISidebarMenuItemType.Dialog,
dialogName: 'money-in',
@@ -467,7 +465,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'cash_flow.label.add_money_out'} />,
text: <T id={'sidebar.add_money_out'} />,
href: '/cashflow-accounts',
type: ISidebarMenuItemType.Dialog,
permission: {
@@ -476,7 +474,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'cash_flow.label.add_cash_account'} />,
text: <T id={'sidebar.add_cash_account'} />,
href: '/cashflow-accounts',
type: ISidebarMenuItemType.Dialog,
permission: {
@@ -485,7 +483,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'cash_flow.label.add_bank_account'} />,
text: <T id={'sidebar.add_bank_account'} />,
href: '/cashflow-accounts',
type: ISidebarMenuItemType.Dialog,
permission: {
@@ -501,16 +499,16 @@ export const SidebarMenu = [
// # Expenses
// ---------------
{
text: <T id={'expenses'} />,
text: <T id={'sidebar.expenses'} />,
type: ISidebarMenuItemType.Overlay,
overlayId: ISidebarMenuOverlayIds.Expenses,
children: [
{
text: <T id={'expenses'} />,
text: <T id={'sidebar.expenses'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'expenses'} />,
text: <T id={'sidebar.expenses'} />,
href: '/expenses',
type: ISidebarMenuItemType.Link,
permission: {
@@ -521,11 +519,11 @@ export const SidebarMenu = [
],
},
{
text: <T id={'New tasks'} />,
text: <T id={'sidebar.new_tasks'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'new_expense'} />,
text: <T id={'sidebar.new_expense'} />,
href: '/expenses/new',
type: ISidebarMenuItemType.Link,
permission: {
@@ -541,16 +539,16 @@ export const SidebarMenu = [
// # Projects Management
// ---------------------
// {
// text: 'Projects',
// text: <T id={'sidebar.projects'} />,
// type: ISidebarMenuItemType.Overlay,
// overlayId: ISidebarMenuOverlayIds.Projects,
// children: [
// {
// text: 'Projects',
// text: <T id={'sidebar.projects'} />,
// type: ISidebarMenuItemType.Group,
// children: [
// {
// text: 'Projects',
// text: <T id={'sidebar.projects'} />,
// href: '/projects',
// type: ISidebarMenuItemType.Link,
// permission: {
@@ -561,11 +559,11 @@ export const SidebarMenu = [
// ],
// },
// {
// text: <T id={'New tasks'} />,
// text: <T id={'sidebar.new_tasks'} />,
// type: ISidebarMenuItemType.Group,
// children: [
// {
// text: <T id={'projects.label.new_project'} />,
// text: <T id={'sidebar.new_project'} />,
// type: ISidebarMenuItemType.Dialog,
// dialogName: 'project-form',
// permission: {
@@ -574,18 +572,18 @@ export const SidebarMenu = [
// },
// },
// {
// text: <T id={'projects.label.new_time_entry'} />,
// text: <T id={'sidebar.new_time_entry'} />,
// type: ISidebarMenuItemType.Dialog,
// dialogName: 'project-time-entry-form',
// },
// ],
// },
// {
// text: <T id={'Reports'} />,
// text: <T id={'sidebar.reports'} />,
// type: ISidebarMenuItemType.Group,
// children: [
// {
// text: <T id={'project_profitability_summary'} />,
// text: <T id={'sidebar.project_profitability_summary'} />,
// href: '/financial-reports/project-profitability-summary',
// type: ISidebarMenuItemType.Link,
// },
@@ -597,16 +595,16 @@ export const SidebarMenu = [
// # Reports
// ---------------
{
text: <T id={'Reports'} />,
text: <T id={'sidebar.reports'} />,
type: ISidebarMenuItemType.Overlay,
overlayId: ISidebarMenuOverlayIds.Reports,
children: [
{
text: <T id={'Reports'} />,
text: <T id={'sidebar.reports'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'balance_sheet'} />,
text: <T id={'sidebar.balance_sheet'} />,
href: '/financial-reports/balance-sheet',
type: ISidebarMenuItemType.Link,
permission: {
@@ -615,7 +613,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'trial_balance_sheet'} />,
text: <T id={'sidebar.trial_balance_sheet'} />,
href: '/financial-reports/trial-balance-sheet',
type: ISidebarMenuItemType.Link,
permission: {
@@ -624,7 +622,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'journal'} />,
text: <T id={'sidebar.journal'} />,
href: '/financial-reports/journal-sheet',
type: ISidebarMenuItemType.Link,
permission: {
@@ -633,7 +631,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'general_ledger'} />,
text: <T id={'sidebar.general_ledger'} />,
href: '/financial-reports/general-ledger',
type: ISidebarMenuItemType.Link,
permission: {
@@ -642,7 +640,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'profit_loss_sheet'} />,
text: <T id={'sidebar.profit_loss_sheet'} />,
href: '/financial-reports/profit-loss-sheet',
type: ISidebarMenuItemType.Link,
permission: {
@@ -651,7 +649,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'cash_flow_statement'} />,
text: <T id={'sidebar.cash_flow_statement'} />,
href: '/financial-reports/cash-flow',
type: ISidebarMenuItemType.Link,
permission: {
@@ -660,7 +658,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'AR_Aging_Summary'} />,
text: <T id={'sidebar.ar_aging_Summary'} />,
href: '/financial-reports/receivable-aging-summary',
type: ISidebarMenuItemType.Link,
permission: {
@@ -669,7 +667,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'AP_Aging_Summary'} />,
text: <T id={'sidebar.ap_aging_summary'} />,
href: '/financial-reports/payable-aging-summary',
type: ISidebarMenuItemType.Link,
permission: {
@@ -680,11 +678,11 @@ export const SidebarMenu = [
],
},
{
text: <T id={'Sales/Purchases'} />,
text: <T id={'sidebar.sales_purchases'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'purchases_by_items'} />,
text: <T id={'sidebar.purchases_by_items'} />,
type: ISidebarMenuItemType.Link,
href: '/financial-reports/purchases-by-items',
permission: {
@@ -693,7 +691,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'sales_by_items'} />,
text: <T id={'sidebar.sales_by_items'} />,
href: '/financial-reports/sales-by-items',
type: ISidebarMenuItemType.Link,
permission: {
@@ -702,7 +700,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'customers_transactions'} />,
text: <T id={'sidebar.customers_transactions'} />,
href: '/financial-reports/transactions-by-customers',
type: ISidebarMenuItemType.Link,
permission: {
@@ -711,7 +709,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'vendors_transactions'} />,
text: <T id={'sidebar.vendors_transactions'} />,
href: '/financial-reports/transactions-by-vendors',
type: ISidebarMenuItemType.Link,
permission: {
@@ -720,7 +718,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'customers_balance_summary'} />,
text: <T id={'sidebar.customers_balance_summary'} />,
href: '/financial-reports/customers-balance-summary',
type: ISidebarMenuItemType.Link,
permission: {
@@ -729,7 +727,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'vendors_balance_summary'} />,
text: <T id={'sidebar.vendors_balance_summary'} />,
href: '/financial-reports/vendors-balance-summary',
type: ISidebarMenuItemType.Link,
permission: {
@@ -740,11 +738,11 @@ export const SidebarMenu = [
],
},
{
text: <T id={'inventory'} />,
text: <T id={'sidebar.inventory'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'inventory_item_details'} />,
text: <T id={'sidebar.inventory_item_details'} />,
href: '/financial-reports/inventory-item-details',
type: ISidebarMenuItemType.Link,
permission: {
@@ -753,7 +751,7 @@ export const SidebarMenu = [
},
},
{
text: <T id={'inventory_valuation'} />,
text: <T id={'sidebar.inventory_valuation'} />,
href: '/financial-reports/inventory-valuation',
type: ISidebarMenuItemType.Link,
permission: {
@@ -766,11 +764,11 @@ export const SidebarMenu = [
],
},
{
text: <T id={'system'} />,
text: <T id={'sidebar.system'} />,
type: ISidebarMenuItemType.Group,
children: [
{
text: <T id={'preferences'} />,
text: <T id={'sidebar.preferences'} />,
href: '/preferences',
type: ISidebarMenuItemType.Link,
permission: {

View File

@@ -25,6 +25,7 @@ import { useMemorizedColumnsWidths } from '@/hooks';
import { useManualJournalsColumns } from './utils';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Manual journals data-table.
@@ -79,14 +80,16 @@ function ManualJournalsDataTable({
// Handle view detail journal.
const handleViewDetailJournal = ({ id }) => {
openDrawer('journal-drawer', {
openDrawer(DRAWERS.JOURNAL_DETAILS, {
manualJournalId: id,
});
};
// Handle cell click.
const handleCellClick = (cell, event) => {
openDrawer('journal-drawer', { manualJournalId: cell.row.original.id });
openDrawer(DRAWERS.JOURNAL_DETAILS, {
manualJournalId: cell.row.original.id,
});
};
// Local storage memorizing columns widths.

View File

@@ -1,6 +1,7 @@
// @ts-nocheck
import React from 'react';
import styled from 'styled-components';
import intl from 'react-intl-universal';
import { FFormGroup, FEditableText, FormattedMessage as T } from '@/components';
export function MakeJournalFormFooterLeft() {
@@ -13,7 +14,7 @@ export function MakeJournalFormFooterLeft() {
>
<FEditableText
name={'description'}
placeholder={<T id={'make_jorunal.decscrption.placeholder'} />}
placeholder={intl.get('make_jorunal.decscrption.placeholder')}
/>
</DescriptionFormGroup>
</React.Fragment>

View File

@@ -1,7 +1,7 @@
// @ts-nocheck
import React, { useEffect } from 'react';
import intl from 'react-intl-universal';
import { Menu, MenuItem, Position, Button } from '@blueprintjs/core';
import { Menu, MenuItem, Position, Button, Intent } from '@blueprintjs/core';
import { Popover2 } from '@blueprintjs/popover2';
import { useFormikContext } from 'formik';
import * as R from 'ramda';
@@ -74,6 +74,7 @@ export const ActionsCellRenderer = ({
const exampleMenu = (
<Menu>
<MenuItem
intent={Intent.DANGER}
onClick={handleClickRemoveRole}
text={intl.get('make_journal.entries.remove_row')}
/>

View File

@@ -3,6 +3,7 @@ import intl from 'react-intl-universal';
import { RESOURCES_TYPES } from '@/constants/resourcesTypes';
import { AbilitySubject, ManualJournalAction } from '@/constants/abilityOption';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { DRAWERS } from '@/constants/drawers';
/**
* Universal search manual journal item select action.
@@ -17,7 +18,7 @@ function JournalUniversalSearchSelectComponent({
openDrawer,
}) {
if (resourceType === RESOURCES_TYPES.MANUAL_JOURNAL) {
openDrawer('journal-drawer', { manualJournalId: resourceId });
openDrawer(DRAWERS.JOURNAL_DETAILS, { manualJournalId: resourceId });
onAction && onAction();
}
return null;

View File

@@ -5,6 +5,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { AbilitySubject, AccountAction } from '@/constants/abilityOption';
import { RESOURCES_TYPES } from '@/constants/resourcesTypes';
import { DRAWERS } from '@/constants/drawers';
function AccountUniversalSearchItemSelectComponent({
// #ownProps
@@ -16,7 +17,7 @@ function AccountUniversalSearchItemSelectComponent({
openDrawer,
}) {
if (resourceType === RESOURCES_TYPES.ACCOUNT) {
openDrawer('account-drawer', { accountId: resourceId });
openDrawer(DRAWERS.ACCOUNT_DETAILS, { accountId: resourceId });
onAction && onAction();
}
return null;
@@ -28,8 +29,8 @@ export const AccountUniversalSearchItemSelect = withDrawerActions(
/**
* Transformes account item to search item.
* @param {*} account
* @returns
* @param {*} account
* @returns
*/
const accountToSearch = (account) => ({
id: account.id,

View File

@@ -23,6 +23,7 @@ import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDialogActions from '@/containers/Dialog/withDialogActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Accounts data-table.
@@ -71,7 +72,7 @@ function AccountsDataTable({
// Handle view detail account.
const handleViewDetailAccount = ({ id }) => {
openDrawer('account-drawer', { accountId: id });
openDrawer(DRAWERS.ACCOUNT_DETAILS, { accountId: id });
};
// Handle new child button click.
@@ -84,7 +85,7 @@ function AccountsDataTable({
};
// Handle cell click.
const handleCellClick = (cell, event) => {
openDrawer('account-drawer', { accountId: cell.row.original.id });
openDrawer(DRAWERS.ACCOUNT_DETAILS, { accountId: cell.row.original.id });
};
// Local storage memorizing columns widths.
const [initialColumnsWidths, , handleColumnResizing] =

View File

@@ -16,6 +16,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { useDeleteAccount } from '@/hooks/query';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Account delete alerts.
@@ -48,7 +49,7 @@ function AccountDeleteAlert({
intent: Intent.SUCCESS,
});
closeAlert(name);
closeDrawer('account-drawer');
closeDrawer(DRAWERS.ACCOUNT_DETAILS);
})
.catch(
({

View File

@@ -11,6 +11,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { handleDeleteErrors } from '@/containers/Purchases/Bills/BillForm/utils';
import { useDeleteBill } from '@/hooks/query';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Bill delete alert.
@@ -43,8 +44,7 @@ function BillDeleteAlert({
message: intl.get('the_bill_has_been_deleted_successfully'),
intent: Intent.SUCCESS,
});
closeDrawer('bill-drawer');
closeDrawer(DRAWERS.BILL_DETAILS);
})
.catch(
({

View File

@@ -15,6 +15,7 @@ import withAlertActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Account delete transaction alert.
@@ -48,7 +49,7 @@ function AccountDeleteTransactionAlert({
message: intl.get('cash_flow_transaction.delete.alert_message'),
intent: Intent.SUCCESS,
});
closeDrawer('cashflow-transaction-drawer');
closeDrawer(DRAWERS.CASHFLOW_TRNASACTION_DETAILS);
})
.catch(
({

View File

@@ -15,6 +15,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { useDeleteCreditNote } from '@/hooks/query';
import { handleDeleteErrors } from '@/containers/Sales/CreditNotes/CreditNotesLanding/utils';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Credit note delete alert.
@@ -46,7 +47,7 @@ function CreditNoteDeleteAlert({
message: intl.get('credit_note.alert.delete_message'),
intent: Intent.SUCCESS,
});
closeDrawer('credit-note-detail-drawer');
closeDrawer(DRAWERS.CREDIT_NOTE_DETAILS);
})
.catch(
({

View File

@@ -11,6 +11,7 @@ import withAlertStoreConnect from '@/containers/Alert/withAlertStoreConnect';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Refund credit transactions delete alert
@@ -42,7 +43,7 @@ function RefundCreditNoteDeleteAlert({
message: intl.get('refund_credit_transactions.alert.delete_message'),
intent: Intent.SUCCESS,
});
closeDrawer('refund-credit-detail-drawer');
closeDrawer(DRAWERS.REFUND_CREDIT_NOTE_DETAILS);
})
.catch(() => {})
.finally(() => {

View File

@@ -15,6 +15,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { useDeleteCustomer } from '@/hooks/query';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Customer delete alert.
@@ -47,7 +48,7 @@ function CustomerDeleteAlert({
message: intl.get('the_customer_has_been_deleted_successfully'),
intent: Intent.SUCCESS,
});
closeDrawer('customer-detail-drawer');
closeDrawer(DRAWERS.CUSTOMER_DETAILS);
})
.catch(
({

View File

@@ -15,6 +15,7 @@ import withAlertActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Estimate delete alert.
@@ -47,7 +48,7 @@ function EstimateDeleteAlert({
message: intl.get('the_estimate_has_been_deleted_successfully'),
intent: Intent.SUCCESS,
});
closeDrawer('estimate-detail-drawer');
closeDrawer(DRAWERS.ESTIMATE_DETAILS);
})
.catch(
({

View File

@@ -10,6 +10,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { useDeleteExpense } from '@/hooks/query';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Expense delete alert.
@@ -42,7 +43,7 @@ function ExpenseDeleteAlert({
}),
intent: Intent.SUCCESS,
});
closeDrawer('expense-drawer');
closeDrawer(DRAWERS.EXPENSE_DETAILS);
})
.catch(
({

View File

@@ -16,6 +16,7 @@ import withAlertActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Invoice delete alert.
@@ -48,7 +49,7 @@ function InvoiceDeleteAlert({
message: intl.get('the_invoice_has_been_deleted_successfully'),
intent: Intent.SUCCESS,
});
closeDrawer('invoice-detail-drawer');
closeDrawer(DRAWERS.INVOICE_DETAILS);
})
.catch(
({

View File

@@ -14,6 +14,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { useDeleteInventoryAdjustment } from '@/hooks/query';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Inventory Adjustment delete alerts.
@@ -49,7 +50,7 @@ function InventoryAdjustmentDeleteAlert({
),
intent: Intent.SUCCESS,
});
closeDrawer('inventory-adjustment-drawer');
closeDrawer(DRAWERS.INVENTORY_ADJUSTMENT_DETAILS);
})
.catch((errors) => {})
.finally(() => {

View File

@@ -17,6 +17,7 @@ import withItemsActions from '@/containers/Items/withItemsActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Item delete alerts.
@@ -54,7 +55,7 @@ function ItemDeleteAlert({
});
// Reset to page number one.
setItemsTableState({ page: 1 });
closeDrawer('item-detail-drawer');
closeDrawer(DRAWERS.ITEM_DETAILS);
})
.catch(
({

View File

@@ -10,6 +10,7 @@ import withAlertStoreConnect from '@/containers/Alert/withAlertStoreConnect';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Journal delete alert.
@@ -45,7 +46,7 @@ function JournalDeleteAlert({
intent: Intent.SUCCESS,
});
closeAlert(name);
closeDrawer('journal-drawer');
closeDrawer(DRAWERS.JOURNAL_DETAILS);
})
.catch(() => {
closeAlert(name);

View File

@@ -11,6 +11,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { useDeletePaymentMade } from '@/hooks/query';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Payment made delete alert.
@@ -44,7 +45,7 @@ function PaymentMadeDeleteAlert({
message: intl.get('the_payment_made_has_been_deleted_successfully'),
intent: Intent.SUCCESS,
});
closeDrawer('payment-made-detail-drawer');
closeDrawer(DRAWERS.PAYMENT_MADE_DETAILS);
})
.finally(() => {
closeAlert(name);

View File

@@ -15,6 +15,7 @@ import withAlertActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Payment receive delete alert.
@@ -50,7 +51,7 @@ function PaymentReceiveDeleteAlert({
),
intent: Intent.SUCCESS,
});
closeDrawer('payment-receive-detail-drawer');
closeDrawer(DRAWERS.PAYMENT_RECEIVE_DETAILS);
})
.catch(() => {})
.finally(() => {

View File

@@ -15,6 +15,7 @@ import withAlertActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Invoice alert.
@@ -47,7 +48,7 @@ function NameDeleteAlert({
message: intl.get('the_receipt_has_been_deleted_successfully'),
intent: Intent.SUCCESS,
});
closeDrawer('receipt-detail-drawer');
closeDrawer(DRAWERS.RECEIPT_DETAILS);
})
.catch(() => {})
.finally(() => {

View File

@@ -10,6 +10,7 @@ import withAlertStoreConnect from '@/containers/Alert/withAlertStoreConnect';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Refund Vendor transactions delete alert.
@@ -43,7 +44,7 @@ function RefundVendorCreditDeleteAlert({
),
intent: Intent.SUCCESS,
});
closeDrawer('refund-vendor-detail-drawer');
closeDrawer(DRAWERS.REFUND_VENDOR_CREDIT_DETAILS);
})
.catch(() => {})
.finally(() => {

View File

@@ -14,6 +14,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { handleDeleteErrors } from '@/containers/Purchases/CreditNotes/CreditNotesLanding/utils';
import { useDeleteVendorCredit } from '@/hooks/query';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Vendor Credit delete alert.
@@ -45,7 +46,7 @@ function VendorCreditDeleteAlert({
message: intl.get('vendor_credits.alert.delete_message'),
intent: Intent.SUCCESS,
});
closeDrawer('vendor-credit-detail-drawer');
closeDrawer(DRAWERS.VENDOR_CREDIT_DETAILS);
})
.catch(
({

View File

@@ -16,6 +16,7 @@ import withAlertActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Vendor delete alert.
@@ -48,7 +49,7 @@ function VendorDeleteAlert({
message: intl.get('the_vendor_has_been_deleted_successfully'),
intent: Intent.SUCCESS,
});
closeDrawer('vendor-detail-drawer');
closeDrawer(DRAWERS.VENDOR_DETAILS);
})
.catch(
({

View File

@@ -14,6 +14,7 @@ import withAlertActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Warehouse transfer delete alert
@@ -48,7 +49,7 @@ function WarehouseTransferDeleteAlert({
message: intl.get('warehouse_transfer.alert.delete_message'),
intent: Intent.SUCCESS,
});
closeDrawer('warehouse-transfer-detail-drawer');
closeDrawer(DRAWERS.WAREHOUSE_TRANSFER_DETAILS);
})
.catch(
({

View File

@@ -23,11 +23,11 @@ export const RegisterSchema = Yup.object().shape({
first_name: Yup.string().required().label(intl.get('first_name_')),
last_name: Yup.string().required().label(intl.get('last_name_')),
email: Yup.string().email().required().label(intl.get('email')),
password: Yup.string().min(4).required().label(intl.get('password')),
password: Yup.string().min(6).required().label(intl.get('password')),
});
export const ResetPasswordSchema = Yup.object().shape({
password: Yup.string().min(4).required().label(intl.get('password')),
password: Yup.string().min(6).required().label(intl.get('password')),
confirm_password: Yup.string()
.oneOf([Yup.ref('password'), null])
.required()

View File

@@ -9,6 +9,7 @@ import {
import { Select } from '@blueprintjs/select';
import { Icon } from '@/components';
import { DRAWERS } from '@/constants/drawers';
export const CashFlowMenuItems = ({
text,
@@ -53,40 +54,40 @@ export const CashFlowMenuItems = ({
export const handleCashFlowTransactionType = (reference, openDrawer) => {
switch (reference.reference_type) {
case 'SaleReceipt':
return openDrawer('receipt-detail-drawer', {
return openDrawer(DRAWERS.RECEIPT_DETAILS, {
receiptId: reference.reference_id,
});
case 'Journal':
return openDrawer('journal-drawer', {
return openDrawer(DRAWERS.JOURNAL_DETAILS, {
manualJournalId: reference.reference_id,
});
case 'Expense':
return openDrawer('expense-drawer', {
return openDrawer(DRAWERS.EXPENSE_DETAILS, {
expenseId: reference.reference_id,
});
case 'PaymentReceive':
return openDrawer('payment-receive-detail-drawer', {
return openDrawer(DRAWERS.PAYMENT_RECEIVE_DETAILS, {
paymentReceiveId: reference.reference_id,
});
case 'BillPayment':
return openDrawer('payment-made-detail-drawer', {
return openDrawer(DRAWERS.PAYMENT_MADE_DETAILS, {
paymentMadeId: reference.reference_id,
});
case 'RefundCreditNote':
return openDrawer('refund-credit-detail-drawer', {
return openDrawer(DRAWERS.REFUND_CREDIT_NOTE_DETAILS, {
refundTransactionId: reference.reference_id,
});
case 'RefundVendorCredit':
return openDrawer('refund-vendor-detail-drawer', {
return openDrawer(DRAWERS.REFUND_VENDOR_CREDIT_DETAILS, {
refundTransactionId: reference.reference_id,
});
case 'InventoryAdjustment':
return openDrawer('inventory-adjustment-drawer', {
return openDrawer(DRAWERS.INVENTORY_ADJUSTMENT_DETAILS, {
inventoryId: reference.reference_id,
});
default:
return openDrawer('cashflow-transaction-drawer', {
return openDrawer(DRAWERS.CASHFLOW_TRNASACTION_DETAILS, {
referenceId: reference.reference_id,
});
}

View File

@@ -28,6 +28,7 @@ import withDialogActions from '@/containers/Dialog/withDialogActions';
import { AccountDialogAction } from '@/containers/Dialogs/AccountDialog/utils';
import { safeCallback } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
const CASHFLOW_SKELETON_N = 4;
@@ -63,7 +64,7 @@ function CashflowBankAccount({
}) {
// Handle view detail account.
const handleViewClick = () => {
openDrawer('account-drawer', { accountId: account.id });
openDrawer(DRAWERS.ACCOUNT_DETAILS, { accountId: account.id });
};
// Handle delete action account.
const handleDeleteClick = () => {

View File

@@ -24,6 +24,7 @@ import { useCustomersListContext } from './CustomersListProvider';
import { useMemorizedColumnsWidths } from '@/hooks';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Customers table.
@@ -108,12 +109,12 @@ function CustomersTable({
// Handle view detail contact.
const handleViewDetailCustomer = ({ id }) => {
openDrawer('customer-detail-drawer', { customerId: id });
openDrawer(DRAWERS.CUSTOMER_DETAILS, { customerId: id });
};
// Handle cell click.
const handleCellClick = (cell, event) => {
openDrawer('customer-detail-drawer', { customerId: cell.row.original.id });
openDrawer(DRAWERS.CUSTOMER_DETAILS, { customerId: cell.row.original.id });
};
if (isEmptyStatus) {

View File

@@ -2,9 +2,11 @@
import intl from 'react-intl-universal';
import { AbilitySubject, CustomerAction } from '@/constants/abilityOption';
import { RESOURCES_TYPES } from '@/constants/resourcesTypes';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { RESOURCES_TYPES } from '@/constants/resourcesTypes';
import { DRAWERS } from '@/constants/drawers';
function CustomerUniversalSearchSelectComponent({
resourceType,
resourceId,
@@ -14,7 +16,7 @@ function CustomerUniversalSearchSelectComponent({
openDrawer,
}) {
if (resourceType === RESOURCES_TYPES.CUSTOMER) {
openDrawer('customer-detail-drawer', { customerId: resourceId });
openDrawer(DRAWERS.CUSTOMER_DETAILS, { customerId: resourceId });
onAction && onAction();
}
return null;

View File

@@ -23,7 +23,6 @@ import {
BranchSelect,
WarehouseSelect,
BranchSelectButton,
WarehouseSelectButton,
AccountsSuggestField,
} from '@/components';
import {
@@ -34,16 +33,17 @@ import {
toSafeNumber,
} from '@/utils';
import { Features, CLASSES } from '@/constants';
import adjustmentType from '@/constants/adjustmentType';
import { useInventoryAdjContext } from './InventoryAdjustmentFormProvider';
import { useFeatureCan } from '@/hooks/state';
import InventoryAdjustmentQuantityFields from './InventoryAdjustmentQuantityFields';
import {
diffQuantity,
useSetPrimaryBranchToForm,
useSetPrimaryWarehouseToForm,
useGetAdjustmentTypeOptions,
} from './utils';
import { useFeatureCan } from '@/hooks/state';
import InventoryAdjustmentQuantityFields from './InventoryAdjustmentQuantityFields';
/**
* Inventory adjustment form dialogs fields.
@@ -52,6 +52,9 @@ export default function InventoryAdjustmentFormDialogFields() {
// Features guard.
const { featureCan } = useFeatureCan();
// Retrieves memorized adjustment types options.
const adjustmentTypes = useGetAdjustmentTypeOptions();
const dateFieldRef = useAutofocus();
// Inventory adjustment dialog context.
@@ -90,7 +93,6 @@ export default function InventoryAdjustmentFormDialogFields() {
<WarehouseSelect
name={'warehouse_id'}
warehouses={warehouses}
input={WarehouseSelectButton}
popoverProps={{ minimal: true }}
/>
</FormGroup>
@@ -149,7 +151,7 @@ export default function InventoryAdjustmentFormDialogFields() {
className={classNames(CLASSES.FILL, 'form-group--type')}
>
<ListSelect
items={adjustmentType}
items={adjustmentTypes}
onItemSelect={(type) => {
const result = diffQuantity(
toSafeNumber(values.quantity),

View File

@@ -1,5 +1,6 @@
// @ts-nocheck
import React from 'react';
import React, { useMemo } from 'react';
import intl from 'react-intl-universal';
import { useFormikContext } from 'formik';
import { useInventoryAdjContext } from './InventoryAdjustmentFormProvider';
import { first } from 'lodash';
@@ -48,3 +49,12 @@ export const useSetPrimaryBranchToForm = () => {
}
}, [isBranchesSuccess, setFieldValue, branches]);
};
export const getAdjustmentTypeOptions = () => [
{ name: intl.get('decrement'), value: 'decrement' },
{ name: intl.get('increment'), value: 'increment' },
];
export const useGetAdjustmentTypeOptions = () => {
return useMemo(() => getAdjustmentTypeOptions(), []);
};

View File

@@ -2,6 +2,7 @@
import React from 'react';
import { useAccount, useAccountTransactions } from '@/hooks/query';
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { DRAWERS } from '@/constants/drawers';
const AccountDrawerContext = React.createContext();
@@ -33,7 +34,7 @@ function AccountDrawerProvider({ accountId, name, ...props }) {
return (
<DrawerLoading loading={isAccountLoading || isAccountsLoading}>
<DrawerHeaderContent name={'account-drawer'} title={drawerTitle} />
<DrawerHeaderContent name={DRAWERS.ACCOUNT_DETAILS} title={drawerTitle} />
<AccountDrawerContext.Provider value={provider} {...props} />
</DrawerLoading>
);

View File

@@ -31,6 +31,7 @@ import {
import { BillMenuItem } from './utils';
import { safeCallback, compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
function BillDetailActionsBar({
// #withDialogActions
@@ -49,7 +50,7 @@ function BillDetailActionsBar({
// Handle edit bill.
const onEditBill = () => {
history.push(`/bills/${billId}/edit`);
closeDrawer('bill-drawer');
closeDrawer(DRAWERS.BILL_DETAILS);
};
// Handle convert to vendor credit.
@@ -57,7 +58,7 @@ function BillDetailActionsBar({
history.push(`/vendor-credits/new?from_bill_id=${billId}`, {
billId: billId,
});
closeDrawer('bill-drawer');
closeDrawer(DRAWERS.BILL_DETAILS);
};
// Handle delete bill.

View File

@@ -5,6 +5,7 @@ import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { useBill, useBillLocatedLandedCost } from '@/hooks/query';
import { useFeatureCan } from '@/hooks/state';
import { Features } from '@/constants';
import { DRAWERS } from '@/constants/drawers';
const BillDrawerContext = React.createContext();
@@ -38,7 +39,7 @@ function BillDrawerProvider({ billId, ...props }) {
return (
<DrawerLoading loading={loading}>
<DrawerHeaderContent
name="bill-drawer"
name={DRAWERS.BILL_DETAILS}
title={intl.get('bill.drawer.title', {
number: bill.bill_number ? `(${bill.bill_number})` : null,
})}

View File

@@ -12,6 +12,7 @@ import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Bill payment transactions datatable.
@@ -48,7 +49,7 @@ function BillPaymentTransactionTable({
// Handles edit bill payment transactions.
const handleEditBillPaymentTransactions = ({ bill_payment_id }) => {
history.push(`/payment-mades/${bill_payment_id}/edit`);
closeDrawer('bill-drawer');
closeDrawer(DRAWERS.BILL_DETAILS);
};
return (

View File

@@ -11,12 +11,12 @@ import { useLocatedLandedCostColumns, ActionsMenu } from './components';
import { useBillDrawerContext } from './BillDrawerProvider';
import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDialogActions from '@/containers/Dialog/withDialogActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { TableStyle } from '@/constants';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Located landed cost table.
@@ -25,9 +25,6 @@ function LocatedLandedCostTable({
// #withAlertsActions
openAlert,
// #withDialogActions
openDialog,
// #withDrawerActions
openDrawer,
}) {
@@ -48,12 +45,12 @@ function LocatedLandedCostTable({
switch (from_transaction_type) {
case 'Expense':
openDrawer('expense-drawer', { expenseId: from_transaction_id });
openDrawer(DRAWERS.EXPENSE_DETAILS, { expenseId: from_transaction_id });
break;
case 'Bill':
default:
openDrawer('bill-drawer', { billId: from_transaction_id });
openDrawer(DRAWERS.BILL_DETAILS, { billId: from_transaction_id });
break;
}
};
@@ -79,6 +76,5 @@ function LocatedLandedCostTable({
export default compose(
withAlertsActions,
withDialogActions,
withDrawerActions,
)(LocatedLandedCostTable);

View File

@@ -4,6 +4,7 @@ import intl from 'react-intl-universal';
import { useCashflowTransaction } from '@/hooks/query';
import { DrawerLoading, DrawerHeaderContent } from '@/components';
import { DRAWERS } from '@/constants/drawers';
const CashflowTransactionDrawerContext = React.createContext();
@@ -32,7 +33,7 @@ function CashflowTransactionDrawerProvider({ referenceId, ...props }) {
return (
<DrawerLoading loading={isCashflowTransactionLoading}>
<DrawerHeaderContent
name={'cashflow-transaction-drawer'}
name={DRAWERS.CASHFLOW_TRNASACTION_DETAILS}
title={intl.get('cash_flow.drawer.label_transaction', {
number: cashflowTransaction?.transaction_number,
})}

View File

@@ -26,6 +26,7 @@ import { CreditNoteAction, AbilitySubject } from '@/constants/abilityOption';
import { compose } from '@/utils';
import { CreditNoteMenuItem } from './utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Credit note detail actions bar.
@@ -47,7 +48,7 @@ function CreditNoteDetailActionsBar({
// Handle edit credit note.
const handleEditCreditNote = () => {
history.push(`/credit-notes/${creditNoteId}/edit`);
closeDrawer('credit-note-detail-drawer');
closeDrawer(DRAWERS.CREDIT_NOTE_DETAILS);
};
const handleRefundCreditNote = () => {

View File

@@ -10,6 +10,7 @@ import {
import { Features } from '@/constants';
import { useFeatureCan } from '@/hooks/state';
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { DRAWERS } from '@/constants/drawers';
const CreditNoteDetailDrawerContext = React.createContext();
@@ -72,7 +73,7 @@ function CreditNoteDetailDrawerProvider({ creditNoteId, ...props }) {
}
>
<DrawerHeaderContent
name="credit-note-detail-drawer"
name={DRAWERS.CREDIT_NOTE_DETAILS}
title={intl.get('credit_note.drawer.title', {
number: creditNote.credit_note_number,
})}

View File

@@ -38,6 +38,7 @@ import {
CustomerAction,
} from '@/constants/abilityOption';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Customer details actions bar.
@@ -58,22 +59,22 @@ function CustomerDetailsActionsBar({
// Handle new invoice button click.
const handleNewInvoiceClick = () => {
history.push('/invoices/new');
closeDrawer('customer-detail-drawer');
closeDrawer(DRAWERS.CUSTOMER_DETAILS);
};
// Handle new receipt button click.
const handleNewReceiptClick = () => {
history.push('/receipts/new');
closeDrawer('customer-detail-drawer');
closeDrawer(DRAWERS.CUSTOMER_DETAILS);
};
// Handle new payment receive button click.
const handleNewPaymentClick = () => {
history.push('/payment-receives/new');
closeDrawer('customer-detail-drawer');
closeDrawer(DRAWERS.CUSTOMER_DETAILS);
};
// Handle new estimate button click.
const handleNewEstimateClick = () => {
history.push('/estimates/new');
closeDrawer('customer-detail-drawer');
closeDrawer(DRAWERS.CUSTOMER_DETAILS);
};
// Handles delete customer click.
const handleDeleteCustomer = () => {
@@ -82,7 +83,7 @@ function CustomerDetailsActionsBar({
// Handles edit customer click.
const handleEditContact = () => {
history.push(`/customers/${customerId}/edit`);
closeDrawer('customer-details-drawer');
closeDrawer(DRAWERS.CUSTOMER_DETAILS);
};
// Handle edit opening balance click.
const handleEditOpeningBalance = () => {

View File

@@ -2,6 +2,7 @@
import React from 'react';
import { useCustomer } from '@/hooks/query';
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { DRAWERS } from '@/constants/drawers';
const ContactDetailDrawerContext = React.createContext();
@@ -26,7 +27,7 @@ function CustomerDetailsDrawerProvider({ customerId, ...props }) {
return (
<DrawerLoading loading={isCustomerLoading}>
<DrawerHeaderContent
name="customer-detail-drawer"
name={DRAWERS.CUSTOMER_DETAILS}
title={customer?.display_name}
/>
<ContactDetailDrawerContext.Provider value={provider} {...props} />

View File

@@ -25,6 +25,7 @@ import {
} from '@/components';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Estimate read-only details actions bar of the drawer.
@@ -48,7 +49,7 @@ function EstimateDetailActionsBar({
// Handle edit sale estimate.
const handleEditEstimate = () => {
history.push(`/estimates/${estimateId}/edit`);
closeDrawer('estimate-detail-drawer');
closeDrawer(DRAWERS.ESTIMATE_DETAILS);
};
// Handle delete sale estimate.

View File

@@ -5,6 +5,7 @@ import { Features } from '@/constants';
import { useEstimate } from '@/hooks/query';
import { useFeatureCan } from '@/hooks/state';
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { DRAWERS } from '@/constants/drawers';
const EstimateDetailDrawerContext = React.createContext();
@@ -29,7 +30,7 @@ function EstimateDetailDrawerProvider({ estimateId, ...props }) {
return (
<DrawerLoading loading={isEstimateLoading}>
<DrawerHeaderContent
name="estimate-detail-drawer"
name={DRAWERS.ESTIMATE_DETAILS}
title={intl.get('estimate.drawer.title', {
number: estimate.estimate_number,
})}

View File

@@ -21,6 +21,7 @@ import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Expense drawer action bar.
@@ -40,7 +41,7 @@ function ExpenseDrawerActionBar({
// Handle the expense edit action.
const handleEditExpense = () => {
history.push(`/expenses/${expense.id}/edit`);
closeDrawer('expense-drawer');
closeDrawer(DRAWERS.EXPENSE_DETAILS);
};
// Handle the expense delete action.

View File

@@ -5,6 +5,7 @@ import { useExpense } from '@/hooks/query';
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { Features } from '@/constants';
import { useFeatureCan } from '@/hooks/state';
import { DRAWERS } from '@/constants/drawers';
const ExpenseDrawerDrawerContext = React.createContext();
@@ -36,7 +37,7 @@ function ExpenseDrawerProvider({ expenseId, ...props }) {
return (
<DrawerLoading loading={isExpenseLoading}>
<DrawerHeaderContent
name="expense-drawer"
name={DRAWERS.EXPENSE_DETAILS}
title={intl.get('expense.drawer.title')}
subTitle={
featureCan(Features.Branches)

View File

@@ -3,6 +3,7 @@ import React from 'react';
import intl from 'react-intl-universal';
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { useInventoryAdjustment } from '@/hooks/query';
import { DRAWERS } from '@/constants/drawers';
const InventoryAdjustmentDrawerContext = React.createContext();
@@ -25,7 +26,7 @@ function InventoryAdjustmentDrawerProvider({ inventoryId, ...props }) {
return (
<DrawerLoading loading={isAdjustmentsLoading}>
<DrawerHeaderContent
name="inventory-adjustment-drawer"
name={DRAWERS.INVENTORY_ADJUSTMENT_DETAILS}
title={intl.get('inventory_adjustment.details_drawer.title')}
/>
<InventoryAdjustmentDrawerContext.Provider value={provider} {...props} />

View File

@@ -30,6 +30,7 @@ import {
import { compose } from '@/utils';
import { BadDebtMenuItem } from './utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Invoice details action bar.
@@ -52,7 +53,7 @@ function InvoiceDetailActionsBar({
// Handle edit sale invoice.
const handleEditInvoice = () => {
history.push(`/invoices/${invoiceId}/edit`);
closeDrawer('invoice-detail-drawer');
closeDrawer(DRAWERS.INVOICE_DETAILS);
};
// Handle convert to invoice.
@@ -60,7 +61,7 @@ function InvoiceDetailActionsBar({
history.push(`/credit-notes/new?from_invoice_id=${invoiceId}`, {
invoiceId: invoiceId,
});
closeDrawer('invoice-detail-drawer');
closeDrawer(DRAWERS.INVOICE_DETAILS);
};
// Handle delete sale invoice.

View File

@@ -5,6 +5,7 @@ import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { Features } from '@/constants';
import { useInvoice } from '@/hooks/query';
import { useFeatureCan } from '@/hooks/state';
import { DRAWERS } from '@/constants/drawers';
const InvoiceDetailDrawerContext = React.createContext();
/**
@@ -28,7 +29,7 @@ function InvoiceDetailDrawerProvider({ invoiceId, ...props }) {
return (
<DrawerLoading loading={isInvoiceLoading}>
<DrawerHeaderContent
name="invoice-detail-drawer"
name={DRAWERS.INVOICE_DETAILS}
title={intl.get('invoice_details.drawer.title', {
invoiceNumber: invoice.invoice_no,
})}

View File

@@ -16,6 +16,7 @@ import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Invoice payment transactions datatable.
@@ -54,7 +55,7 @@ function InvoicePaymentTransactionsTable({
// Handles edit payment transactions.
const handleEditPaymentTransactions = ({ payment_receive_id }) => {
history.push(`/payment-receives/${payment_receive_id}/edit`);
closeDrawer('invoice-detail-drawer');
closeDrawer(DRAWERS.INVOICE_DETAILS);
};
return (
<Card>

View File

@@ -21,8 +21,10 @@ import {
FormattedMessage as T,
Can,
} from '@/components';
import { ItemDetailActionsMoreBtn } from './ItemDetailActionsMoreBtn';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Item action-bar of readonly details drawer.
@@ -42,7 +44,7 @@ function ItemDetailActionsBar({
// Handle edit item.
const handleEditItem = () => {
history.push(`/items/${itemId}/edit`);
closeDrawer('item-detail-drawer');
closeDrawer(DRAWERS.ITEM_DETAILS);
};
// Handle delete item.
@@ -71,6 +73,7 @@ function ItemDetailActionsBar({
onClick={handleDeleteItem}
/>
</Can>
<ItemDetailActionsMoreBtn />
</NavbarGroup>
</DashboardActionsBar>
);

View File

@@ -0,0 +1,64 @@
// @ts-nocheck
import React from 'react';
import * as R from 'ramda';
import { Can, Icon, T } from '@/components';
import {
Button,
Menu,
MenuItem,
Popover,
PopoverInteractionKind,
Position,
} from '@blueprintjs/core';
import {
AbilitySubject,
InventoryAdjustmentAction,
} from '@/constants/abilityOption';
import { useItemDetailDrawerContext } from './ItemDetailDrawerProvider';
import withDialogActions from '@/containers/Dialog/withDialogActions';
/**
* Invoice details more actions menu.
* @returns {React.JSX}
*/
export const ItemDetailActionsMoreBtn = R.compose(withDialogActions)(
({
//#withDialogActions,
openDialog,
}) => {
const { itemId, item } = useItemDetailDrawerContext();
// Cannot continue if the item type is not inventory.
if (item.type !== 'inventory') return null;
const handleInventoryAdjustment = () => {
openDialog('inventory-adjustment', { itemId });
};
return (
<Popover
minimal={true}
interactionKind={PopoverInteractionKind.CLICK}
position={Position.BOTTOM_LEFT}
modifiers={{
offset: { offset: '0, 4' },
}}
content={
<Menu>
<Can
I={InventoryAdjustmentAction.Edit}
a={AbilitySubject.InventoryAdjustment}
>
<MenuItem
text={<T id={'item.view_drawer.make_adjustment'} />}
onClick={handleInventoryAdjustment}
/>
</Can>
</Menu>
}
>
<Button icon={<Icon icon="more-vert" iconSize={16} />} minimal={true} />
</Popover>
);
},
);

View File

@@ -3,6 +3,7 @@ import React from 'react';
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { useItem } from '@/hooks/query';
import { inactiveStatus } from './utlis';
import { DRAWERS } from '@/constants/drawers';
const ItemDetailDrawerContext = React.createContext();
@@ -30,7 +31,7 @@ function ItemDetailDrawerProvider({ itemId, ...props }) {
return (
<DrawerLoading loading={isItemLoading}>
<DrawerHeaderContent
name="item-detail-drawer"
name={DRAWERS.ITEM_DETAILS}
title={inactiveStatus(item)}
/>
<ItemDetailDrawerContext.Provider value={provider} {...props} />

View File

@@ -12,6 +12,7 @@ import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Bill payment transactions data table.
@@ -48,7 +49,7 @@ function BillPaymentTransactions({
// Handles edit payment transactions.
const handleEditPaymentTransactions = ({ bill_id }) => {
history.push(`/bills/${bill_id}/edit`);
closeDrawer('item-detail-drawer');
closeDrawer(DRAWERS.ITEM_DETAILS);
};
return (
<DataTable

View File

@@ -13,6 +13,7 @@ import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Esimtate payment transactions.
@@ -26,6 +27,7 @@ function EstimatePaymentTransactions({
}) {
const history = useHistory();
// Estimate transactions table columns.
const columns = useEstimateTransactionsColumns();
const { itemId } = useItemDetailDrawerContext();
@@ -49,7 +51,7 @@ function EstimatePaymentTransactions({
// Handles edit payment transactions.
const handleEditPaymentTransactions = ({ estimate_id }) => {
history.push(`/estimates/${estimate_id}/edit`);
closeDrawer('item-detail-drawer');
closeDrawer(DRAWERS.ITEM_DETAILS);
};
return (

View File

@@ -16,6 +16,7 @@ import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Invoice payment transactions.
@@ -52,7 +53,7 @@ function InvoicePaymentTransactions({
// Handles edit payment transactions.
const handleEditPaymentTransactions = ({ invoice_id }) => {
history.push(`/invoices/${invoice_id}/edit`);
closeDrawer('item-detail-drawer');
closeDrawer(DRAWERS.ITEM_DETAILS);
};
return (
<DataTable

View File

@@ -12,6 +12,7 @@ import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Receipt payment transactions.
@@ -48,7 +49,7 @@ function ReceiptPaymentTransactions({
// Handles edit payment transactions.
const handleEditPaymentTransactions = ({ receipt_id }) => {
history.push(`/receipts/${receipt_id}/edit`);
closeDrawer('item-detail-drawer');
closeDrawer(DRAWERS.ITEM_DETAILS);
};
return (

View File

@@ -22,6 +22,7 @@ import { useManualJournalDrawerContext } from './ManualJournalDrawerProvider';
import { ManualJournalAction, AbilitySubject } from '@/constants/abilityOption';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Manual journal action bar.
@@ -39,7 +40,7 @@ function ManualJournalDrawerActionBar({
// Handle edit manual journal action.
const handleEditManualJournal = () => {
history.push(`/manual-journals/${manualJournalId}/edit`);
closeDrawer('journal-drawer');
closeDrawer(DRAWERS.JOURNAL_DETAILS);
};
// Handle manual journal delete action.

View File

@@ -3,6 +3,7 @@ import React from 'react';
import intl from 'react-intl-universal';
import { useJournal } from '@/hooks/query';
import { DrawerLoading, DrawerHeaderContent } from '@/components';
import { DRAWERS } from '@/constants/drawers';
const ManualJournalDrawerContext = React.createContext();
@@ -31,7 +32,7 @@ function ManualJournalDrawerProvider({ manualJournalId, ...props }) {
return (
<DrawerLoading loading={isJournalLoading}>
<DrawerHeaderContent
name={'journal-drawer'}
name={DRAWERS.JOURNAL_DETAILS}
title={intl.get('manual_journal.drawer.title', {
number: manualJournal?.journal_number,
})}

View File

@@ -24,6 +24,7 @@ import {
} from '@/components';
import { PaymentMadeAction, AbilitySubject } from '@/constants/abilityOption';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Payment made - Details panel - actions bar.
@@ -42,7 +43,7 @@ function PaymentMadeDetailActionsBar({
// Handle edit payment made.
const handleEditPaymentMade = () => {
history.push(`/payment-mades/${paymentMadeId}/edit`);
closeDrawer('payment-made-detail-drawer');
closeDrawer(DRAWERS.PAYMENT_MADE_DETAILS);
};
// Handle delete payment made.

View File

@@ -21,9 +21,13 @@ import {
FormattedMessage as T,
DrawerActionsBar,
} from '@/components';
import { PaymentReceiveAction, AbilitySubject } from '@/constants/abilityOption';
import {
PaymentReceiveAction,
AbilitySubject,
} from '@/constants/abilityOption';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Payment receive actions bar.
@@ -46,7 +50,7 @@ function PaymentReceiveActionsBar({
// Handle edit payment receive.
const handleEditPaymentReceive = () => {
history.push(`/payment-receives/${paymentReceiveId}/edit`);
closeDrawer('payment-receive-detail-drawer');
closeDrawer(DRAWERS.PAYMENT_RECEIVE_DETAILS);
};
// Handle delete payment receive.

View File

@@ -5,6 +5,7 @@ import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { usePaymentReceive } from '@/hooks/query';
import { Features } from '@/constants';
import { useFeatureCan } from '@/hooks/state';
import { DRAWERS } from '@/constants/drawers';
const PaymentReceiveDetailContext = React.createContext();
@@ -34,7 +35,7 @@ function PaymentReceiveDetailProvider({ paymentReceiveId, ...props }) {
return (
<DrawerLoading loading={isPaymentLoading}>
<DrawerHeaderContent
name="payment-receive-detail-drawer"
name={DRAWERS.PAYMENT_RECEIVE_DETAILS}
title={intl.get('payment_receive.drawer.title', {
number: paymentReceive.payment_receive_no,
})}

View File

@@ -7,6 +7,7 @@ import {
} from '@/components';
import QuickCustomerFormDrawer from './QuickCustomerFormDrawer';
import { DRAWERS } from '@/constants/drawers';
/**
* Quick create/edit customer drawer.
@@ -15,7 +16,7 @@ export default function QuickCreateCustomerDrawerContent({ displayName }) {
return (
<React.Fragment>
<DrawerHeaderContent
name="quick-create-customer"
name={DRAWERS.QUICK_CREATE_CUSTOMER}
title={<T id={'create_a_new_customer'} />}
/>
<DrawerBody>

View File

@@ -13,6 +13,7 @@ import CustomerFormFormik, {
} from '@/containers/Customers/CustomerForm/CustomerFormFormik';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import { DRAWERS } from '@/constants/drawers';
/**
* Drawer customer form loading wrapper.
@@ -30,11 +31,11 @@ function DrawerCustomerFormLoading({ children }) {
function QuickCustomerFormDrawer({ displayName, closeDrawer, customerId }) {
// Handle the form submit request success.
const handleSubmitSuccess = () => {
closeDrawer('quick-create-customer');
closeDrawer(DRAWERS.QUICK_CREATE_CUSTOMER);
};
// Handle the form cancel action.
const handleCancelForm = () => {
closeDrawer('quick-create-customer');
closeDrawer(DRAWERS.QUICK_CREATE_CUSTOMER);
};
return (

View File

@@ -4,6 +4,7 @@ import {
DrawerHeaderContent,
DrawerBody,
FormattedMessage as T,
Drawer,
} from '@/components';
import QuickCreateItemDrawerForm from './QuickCreateItemDrawerForm';
@@ -15,7 +16,7 @@ export default function QuickCreateItemDrawerContent({ itemName }) {
return (
<React.Fragment>
<DrawerHeaderContent
name="quick-create-item"
name={DRAWER.QUICK_CREATE_ITEM}
title={<T id={'create_a_new_item'} />}
/>
<DrawerBody>

View File

@@ -15,6 +15,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import withDashboardActions from '@/containers/Dashboard/withDashboardActions';
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
import { DRAWERS } from '@/constants/drawers';
/**
* Drawer item form loading.
@@ -43,7 +44,7 @@ function QuickCreateItemDrawerForm({
// Handle the form submit request success.
const handleSubmitSuccess = (values, form, submitPayload, response) => {
if (submitPayload.redirect) {
closeDrawer('quick-create-item');
closeDrawer(DRAWERS.QUICK_CREATE_ITEM);
}
if (payload.quickActionEvent) {
addQuickActionEvent(payload.quickActionEvent, {
@@ -53,7 +54,7 @@ function QuickCreateItemDrawerForm({
};
// Handle the form cancel.
const handleFormCancel = () => {
closeDrawer('quick-create-item');
closeDrawer(DRAWERS.QUICK_CREATE_ITEM);
};
return (

View File

@@ -16,6 +16,7 @@ import withDrawerActions from '@/containers/Drawer/withDrawerActions';
import withDashboardActions from '@/containers/Dashboard/withDashboardActions';
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
import { DRAWERS } from '@/constants/drawers';
/**
* Drawer vendor form loading wrapper.
@@ -41,7 +42,7 @@ function QuickVendorFormDrawer({
// Handle the form submit request success.
const handleSubmitSuccess = (values, form, submitPayload, response) => {
if (!submitPayload.noRedirect) {
closeDrawer('quick-write-vendor');
closeDrawer(DRAWERS.QUICK_WRITE_VENDOR);
}
if (payload.quickActionEvent) {
addQuickActionEvent(payload.quickActionEvent, {
@@ -51,7 +52,7 @@ function QuickVendorFormDrawer({
};
// Handle the form cancel action.
const handleCancelForm = () => {
closeDrawer('quick-write-vendor');
closeDrawer(DRAWERS.QUICK_WRITE_VENDOR);
};
return (

View File

@@ -7,6 +7,7 @@ import {
} from '@/components';
import QuickVendorFormDrawer from './QuickVendorFormDrawer';
import { DRAWERS } from '@/constants/drawers';
/**
* Quick create/edit vendor drawer.
@@ -15,7 +16,7 @@ export default function QuickWriteVendorDrawerContent({ displayName }) {
return (
<React.Fragment>
<DrawerHeaderContent
name="quick-create-customer"
name={DRAWERS.QUICK_CREATE_CUSTOMER}
title={<T id={'create_a_new_vendor'} />}
/>

View File

@@ -23,6 +23,7 @@ import { ReceiptMoreMenuItems } from './components';
import { useReceiptDetailDrawerContext } from './ReceiptDetailDrawerProvider';
import { SaleReceiptAction, AbilitySubject } from '@/constants/abilityOption';
import { safeCallback, compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Receipt details actions bar.
@@ -44,7 +45,7 @@ function ReceiptDetailActionBar({
// Handle edit sale receipt.
const onEditReceipt = () => {
history.push(`/receipts/${receiptId}/edit`);
closeDrawer('receipt-detail-drawer');
closeDrawer(DRAWERS.RECEIPT_DETAILS);
};
// Handle delete sale receipt.

View File

@@ -5,6 +5,7 @@ import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { Features } from '@/constants';
import { useFeatureCan } from '@/hooks/state';
import { useReceipt } from '@/hooks/query';
import { DRAWERS } from '@/constants/drawers';
// useTransactionsByReference
const ReceiptDetailDrawerContext = React.createContext();
@@ -33,7 +34,7 @@ function ReceiptDetailDrawerProvider({ receiptId, ...props }) {
return (
<DrawerLoading loading={isReceiptLoading}>
<DrawerHeaderContent
name="receipt-detail-drawer"
name={DRAWERS.RECEIPT_DETAILS}
title={intl.get('receipt.drawer.title', {
number: receipt.receipt_number,
})}

View File

@@ -3,6 +3,7 @@ import React from 'react';
import intl from 'react-intl-universal';
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { useRefundCreditTransaction } from '@/hooks/query';
import { DRAWERS } from '@/constants/drawers';
const RefundCreditNoteDrawerContext = React.createContext();
@@ -27,7 +28,7 @@ function RefundCreditNoteDrawerProvider({ refundTransactionId, ...props }) {
return (
<DrawerLoading loading={isRefundCreditTransaction}>
<DrawerHeaderContent
name="refund-credit-detail-drawer"
name={DRAWERS.REFUND_CREDIT_NOTE_DETAILS}
title={intl.get('refund_credit.drawer.title')}
/>
<RefundCreditNoteDrawerContext.Provider value={provider} {...props} />

View File

@@ -3,6 +3,7 @@ import React from 'react';
import intl from 'react-intl-universal';
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { useRefundVendorCreditTransaction } from '@/hooks/query';
import { DRAWERS } from '@/constants/drawers';
const RefundVendorCreditDrawerContent = React.createContext();
@@ -27,7 +28,7 @@ function RefundVendorCreditDrawerProvider({ refundTransactionId, ...props }) {
return (
<DrawerLoading loading={isRefundVendorTransaction}>
<DrawerHeaderContent
name="refund-vendor-detail-drawer"
name={DRAWERS.REFUND_VENDOR_CREDIT_DETAILS}
title={intl.get('refund_vendor_credit.drawer.title')}
/>
<RefundVendorCreditDrawerContent.Provider value={provider} {...props} />

View File

@@ -25,6 +25,7 @@ import {
} from '@/components';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
/**
* Vendor credit detail actions bar.
@@ -39,14 +40,13 @@ function VendorCreditDetailActionsBar({
// #withDrawerActions
closeDrawer,
}) {
const { vendorCreditId, vendorCredit } = useVendorCreditDetailDrawerContext();
const history = useHistory();
const { vendorCreditId, vendorCredit } = useVendorCreditDetailDrawerContext();
// Handle edit credit note.
const handleEditVendorCredit = () => {
history.push(`/vendor-credits/${vendorCreditId}/edit`);
closeDrawer('vendor-credit-detail-drawer');
closeDrawer(DRAWERS.VENDOR_CREDIT_DETAILS);
};
// Handle delete credit note.

View File

@@ -9,6 +9,7 @@ import {
import { DrawerHeaderContent, DrawerLoading } from '@/components';
import { useFeatureCan } from '@/hooks/state';
import { Features } from '@/constants';
import { DRAWERS } from '@/constants/drawers';
const VendorCreditDetailDrawerContext = React.createContext();
@@ -61,7 +62,7 @@ function VendorCreditDetailDrawerProvider({ vendorCreditId, ...props }) {
}
>
<DrawerHeaderContent
name="vendor-credit-detail-drawer"
name={DRAWERS.VENDOR_CREDIT_DETAILS}
title={intl.get('vendor_credit.drawer_vendor_credit_detail', {
vendorNumber: vendorCredit.vendor_credit_number,
})}

Some files were not shown because too many files have changed in this diff Show More