| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/app.ansachsongkhoe.net/app/Http/Controllers/ |
Upload File : |
<?php
namespace App\Http\Controllers;
use App\Business;
use App\Currency;
use App\Notifications\TestEmailNotification;
use App\System;
use App\TaxRate;
use App\Unit;
use App\User;
use App\Utils\BusinessUtil;
use App\Utils\ModuleUtil;
use App\Utils\RestaurantUtil;
use Carbon\Carbon;
use DateTimeZone;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Spatie\Permission\Models\Permission;
class BusinessController extends Controller
{
/*
|--------------------------------------------------------------------------
| BusinessController
|--------------------------------------------------------------------------
|
| This controller handles the registration of new business/business as well as their
| validation and creation.
|
*/
/**
* All Utils instance.
*
*/
protected $businessUtil;
protected $restaurantUtil;
protected $moduleUtil;
protected $mailDrivers;
/**
* Constructor
*
* @param ProductUtils $product
* @return void
*/
public function __construct(BusinessUtil $businessUtil, RestaurantUtil $restaurantUtil, ModuleUtil $moduleUtil)
{
$this->businessUtil = $businessUtil;
$this->moduleUtil = $moduleUtil;
$this->theme_colors = [
'blue' => 'Blue',
'black' => 'Black',
'purple' => 'Purple',
'green' => 'Green',
'red' => 'Red',
'yellow' => 'Yellow',
'blue-light' => 'Blue Light',
'black-light' => 'Black Light',
'purple-light' => 'Purple Light',
'green-light' => 'Green Light',
'red-light' => 'Red Light',
];
$this->mailDrivers = [
'smtp' => 'SMTP',
// 'sendmail' => 'Sendmail',
// 'mailgun' => 'Mailgun',
// 'mandrill' => 'Mandrill',
// 'ses' => 'SES',
// 'sparkpost' => 'Sparkpost'
];
}
/**
* Shows registration form
*
* @return \Illuminate\Http\Response
*/
public function getRegister()
{
if (!config('constants.allow_registration')) {
return redirect('/');
}
$currencies = $this->businessUtil->allCurrencies();
$timezone_list = $this->businessUtil->allTimeZones();
$months = [];
for ($i=1; $i<=12; $i++) {
$months[$i] = __('business.months.' . $i);
}
$accounting_methods = $this->businessUtil->allAccountingMethods();
$package_id = request()->package;
$system_settings = System::getProperties(['superadmin_enable_register_tc', 'superadmin_register_tc'], true);
return view('business.register', compact(
'currencies',
'timezone_list',
'months',
'accounting_methods',
'package_id',
'system_settings'
));
}
/**
* Handles the registration of a new business and it's owner
*
* @return \Illuminate\Http\Response
*/
public function postRegister(Request $request)
{
if (!config('constants.allow_registration')) {
return redirect('/');
}
try {
$validator = $request->validate(
[
'name' => 'required|max:255',
'currency_id' => 'required|numeric',
'country' => 'required|max:255',
'state' => 'required|max:255',
'city' => 'required|max:255',
'zip_code' => 'required|max:255',
'landmark' => 'required|max:255',
'time_zone' => 'required|max:255',
'surname' => 'max:10',
'email' => 'sometimes|nullable|email|unique:users|max:255',
'first_name' => 'required|max:255',
'username' => 'required|min:4|max:255|unique:users',
'password' => 'required|min:4|max:255',
'fy_start_month' => 'required',
'accounting_method' => 'required',
],
[
'name.required' => __('validation.required', ['attribute' => __('business.business_name')]),
'name.currency_id' => __('validation.required', ['attribute' => __('business.currency')]),
'country.required' => __('validation.required', ['attribute' => __('business.country')]),
'state.required' => __('validation.required', ['attribute' => __('business.state')]),
'city.required' => __('validation.required', ['attribute' => __('business.city')]),
'zip_code.required' => __('validation.required', ['attribute' => __('business.zip_code')]),
'landmark.required' => __('validation.required', ['attribute' => __('business.landmark')]),
'time_zone.required' => __('validation.required', ['attribute' => __('business.time_zone')]),
'email.email' => __('validation.email', ['attribute' => __('business.email')]),
'email.email' => __('validation.unique', ['attribute' => __('business.email')]),
'first_name.required' => __('validation.required', ['attribute' =>
__('business.first_name')]),
'username.required' => __('validation.required', ['attribute' => __('business.username')]),
'username.min' => __('validation.min', ['attribute' => __('business.username')]),
'password.required' => __('validation.required', ['attribute' => __('business.username')]),
'password.min' => __('validation.min', ['attribute' => __('business.username')]),
'fy_start_month.required' => __('validation.required', ['attribute' => __('business.fy_start_month')]),
'accounting_method.required' => __('validation.required', ['attribute' => __('business.accounting_method')]),
]
);
DB::beginTransaction();
//Create owner.
$owner_details = $request->only(['surname', 'first_name', 'last_name', 'username', 'email', 'password', 'language']);
$owner_details['language'] = empty($owner_details['language']) ? config('app.locale') : $owner_details['language'];
$user = User::create_user($owner_details);
$business_details = $request->only(['name', 'start_date', 'currency_id', 'time_zone']);
$business_details['fy_start_month'] = 1;
$business_location = $request->only(['name', 'country', 'state', 'city', 'zip_code', 'landmark', 'website', 'mobile', 'alternate_number']);
//Create the business
$business_details['owner_id'] = $user->id;
if (!empty($business_details['start_date'])) {
$business_details['start_date'] = Carbon::createFromFormat(config('constants.default_date_format'), $business_details['start_date'])->toDateString();
}
//upload logo
$logo_name = $this->businessUtil->uploadFile($request, 'business_logo', 'business_logos', 'image');
if (!empty($logo_name)) {
$business_details['logo'] = $logo_name;
}
//default enabled modules
$business_details['enabled_modules'] = ['purchases','add_sale','pos_sale','stock_transfers','stock_adjustment','expenses'];
$business = $this->businessUtil->createNewBusiness($business_details);
//Update user with business id
$user->business_id = $business->id;
$user->save();
$this->businessUtil->newBusinessDefaultResources($business->id, $user->id);
$new_location = $this->businessUtil->addLocation($business->id, $business_location);
//create new permission with the new location
Permission::create(['name' => 'location.' . $new_location->id ]);
DB::commit();
//Module function to be called after after business is created
if (config('app.env') != 'demo') {
$this->moduleUtil->getModuleData('after_business_created', ['business' => $business]);
}
//Process payment information if superadmin is installed & package information is present
$is_installed_superadmin = $this->moduleUtil->isSuperadminInstalled();
$package_id = $request->get('package_id', null);
if ($is_installed_superadmin && !empty($package_id) && (config('app.env') != 'demo')) {
$package = \Modules\Superadmin\Entities\Package::find($package_id);
if (!empty($package)) {
Auth::login($user);
return redirect()->route('register-pay', ['package_id' => $package_id]);
}
}
$output = ['success' => 1,
'msg' => __('business.business_created_succesfully')
];
return redirect('login')->with('status', $output);
} catch (\Exception $e) {
DB::rollBack();
\Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());
$output = ['success' => 0,
'msg' => __('messages.something_went_wrong')
];
return back()->with('status', $output)->withInput();
}
}
/**
* Handles the validation username
*
* @return \Illuminate\Http\Response
*/
public function postCheckUsername(Request $request)
{
$username = $request->input('username');
if (!empty($request->input('username_ext'))) {
$username .= $request->input('username_ext');
}
$count = User::where('username', $username)->count();
if ($count == 0) {
echo "true";
exit;
} else {
echo "false";
exit;
}
}
/**
* Shows business settings form
*
* @return \Illuminate\Http\Response
*/
public function getBusinessSettings()
{
if (!auth()->user()->can('business_settings.access')) {
abort(403, 'Unauthorized action.');
}
$timezones = DateTimeZone::listIdentifiers(DateTimeZone::ALL);
$timezone_list = [];
foreach ($timezones as $timezone) {
$timezone_list[$timezone] = $timezone;
}
$business_id = request()->session()->get('user.business_id');
$business = Business::where('id', $business_id)->first();
$currencies = $this->businessUtil->allCurrencies();
$tax_details = TaxRate::forBusinessDropdown($business_id);
$tax_rates = $tax_details['tax_rates'];
$months = [];
for ($i=1; $i<=12; $i++) {
$months[$i] = __('business.months.' . $i);
}
$accounting_methods = [
'fifo' => __('business.fifo'),
'lifo' => __('business.lifo')
];
$commission_agent_dropdown = [
'' => __('lang_v1.disable'),
'logged_in_user' => __('lang_v1.logged_in_user'),
'user' => __('lang_v1.select_from_users_list'),
'cmsn_agnt' => __('lang_v1.select_from_commisssion_agents_list')
];
$units_dropdown = Unit::forDropdown($business_id, true);
$date_formats = Business::date_formats();
$shortcuts = json_decode($business->keyboard_shortcuts, true);
$pos_settings = empty($business->pos_settings) ? $this->businessUtil->defaultPosSettings() : json_decode($business->pos_settings, true);
$email_settings = empty($business->email_settings) ? $this->businessUtil->defaultEmailSettings() : $business->email_settings;
$sms_settings = empty($business->sms_settings) ? $this->businessUtil->defaultSmsSettings() : $business->sms_settings;
$modules = $this->moduleUtil->availableModules();
$theme_colors = $this->theme_colors;
$mail_drivers = $this->mailDrivers;
$allow_superadmin_email_settings = System::getProperty('allow_email_settings_to_businesses');
$custom_labels = !empty($business->custom_labels) ? json_decode($business->custom_labels, true) : [];
$common_settings = !empty($business->common_settings) ? $business->common_settings : [];
$weighing_scale_setting = !empty($business->weighing_scale_setting) ? $business->weighing_scale_setting : [];
return view('business.settings', compact('business', 'currencies', 'tax_rates', 'timezone_list', 'months', 'accounting_methods', 'commission_agent_dropdown', 'units_dropdown', 'date_formats', 'shortcuts', 'pos_settings', 'modules', 'theme_colors', 'email_settings', 'sms_settings', 'mail_drivers', 'allow_superadmin_email_settings', 'custom_labels', 'common_settings', 'weighing_scale_setting'));
}
/**
* Updates business settings
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function postBusinessSettings(Request $request)
{
if (!auth()->user()->can('business_settings.access')) {
abort(403, 'Unauthorized action.');
}
try {
$notAllowed = $this->businessUtil->notAllowedInDemo();
if (!empty($notAllowed)) {
return $notAllowed;
}
$business_details = $request->only(['name', 'start_date', 'currency_id', 'tax_label_1', 'tax_number_1', 'tax_label_2', 'tax_number_2', 'default_profit_percent', 'default_sales_tax', 'default_sales_discount', 'sell_price_tax', 'sku_prefix', 'time_zone', 'fy_start_month', 'accounting_method', 'transaction_edit_days', 'sales_cmsn_agnt', 'item_addition_method', 'currency_symbol_placement', 'on_product_expiry',
'stop_selling_before', 'default_unit', 'expiry_type', 'date_format',
'time_format', 'ref_no_prefixes', 'theme_color', 'email_settings',
'sms_settings', 'rp_name', 'amount_for_unit_rp',
'min_order_total_for_rp', 'max_rp_per_order',
'redeem_amount_per_unit_rp', 'min_order_total_for_redeem',
'min_redeem_point', 'max_redeem_point', 'rp_expiry_period',
'rp_expiry_type', 'custom_labels', 'weighing_scale_setting',
'code_label_1', 'code_1', 'code_label_2', 'code_2']);
if (!empty($request->input('enable_rp')) && $request->input('enable_rp') == 1) {
$business_details['enable_rp'] = 1;
} else {
$business_details['enable_rp'] = 0;
}
$business_details['amount_for_unit_rp'] = !empty($business_details['amount_for_unit_rp']) ? $this->businessUtil->num_uf($business_details['amount_for_unit_rp']) : 1;
$business_details['min_order_total_for_rp'] = !empty($business_details['min_order_total_for_rp']) ? $this->businessUtil->num_uf($business_details['min_order_total_for_rp']) : 1;
$business_details['redeem_amount_per_unit_rp'] = !empty($business_details['redeem_amount_per_unit_rp']) ? $this->businessUtil->num_uf($business_details['redeem_amount_per_unit_rp']) : 1;
$business_details['min_order_total_for_redeem'] = !empty($business_details['min_order_total_for_redeem']) ? $this->businessUtil->num_uf($business_details['min_order_total_for_redeem']) : 1;
$business_details['default_profit_percent'] = !empty($business_details['default_profit_percent']) ? $this->businessUtil->num_uf($business_details['default_profit_percent']) : 0;
$business_details['default_sales_discount'] = !empty($business_details['default_sales_discount']) ? $this->businessUtil->num_uf($business_details['default_sales_discount']) : 0;
if (!empty($business_details['start_date'])) {
$business_details['start_date'] = $this->businessUtil->uf_date($business_details['start_date']);
}
if (!empty($request->input('enable_tooltip')) && $request->input('enable_tooltip') == 1) {
$business_details['enable_tooltip'] = 1;
} else {
$business_details['enable_tooltip'] = 0;
}
$business_details['enable_product_expiry'] = !empty($request->input('enable_product_expiry')) && $request->input('enable_product_expiry') == 1 ? 1 : 0;
if ($business_details['on_product_expiry'] == 'keep_selling') {
$business_details['stop_selling_before'] = null;
}
$business_details['stock_expiry_alert_days'] = !empty($request->input('stock_expiry_alert_days')) ? $request->input('stock_expiry_alert_days') : 30;
//Check for Purchase currency
if (!empty($request->input('purchase_in_diff_currency')) && $request->input('purchase_in_diff_currency') == 1) {
$business_details['purchase_in_diff_currency'] = 1;
$business_details['purchase_currency_id'] = $request->input('purchase_currency_id');
$business_details['p_exchange_rate'] = $request->input('p_exchange_rate');
} else {
$business_details['purchase_in_diff_currency'] = 0;
$business_details['purchase_currency_id'] = null;
$business_details['p_exchange_rate'] = 1;
}
//upload logo
$logo_name = $this->businessUtil->uploadFile($request, 'business_logo', 'business_logos', 'image');
if (!empty($logo_name)) {
$business_details['logo'] = $logo_name;
}
$checkboxes = ['enable_editing_product_from_purchase',
'enable_inline_tax',
'enable_brand', 'enable_category', 'enable_sub_category', 'enable_price_tax', 'enable_purchase_status',
'enable_lot_number', 'enable_racks', 'enable_row', 'enable_position', 'enable_sub_units'];
foreach ($checkboxes as $value) {
$business_details[$value] = !empty($request->input($value)) && $request->input($value) == 1 ? 1 : 0;
}
$business_id = request()->session()->get('user.business_id');
$business = Business::where('id', $business_id)->first();
//Update business settings
if (!empty($business_details['logo'])) {
$business->logo = $business_details['logo'];
} else {
unset($business_details['logo']);
}
//System settings
$shortcuts = $request->input('shortcuts');
$business_details['keyboard_shortcuts'] = json_encode($shortcuts);
//pos_settings
$pos_settings = $request->input('pos_settings');
$default_pos_settings = $this->businessUtil->defaultPosSettings();
foreach ($default_pos_settings as $key => $value) {
if (!isset($pos_settings[$key])) {
$pos_settings[$key] = $value;
}
}
$business_details['pos_settings'] = json_encode($pos_settings);
$business_details['custom_labels'] = json_encode($business_details['custom_labels']);
$business_details['common_settings'] = !empty($request->input('common_settings')) ? $request->input('common_settings') : [];
//Enabled modules
$enabled_modules = $request->input('enabled_modules');
$business_details['enabled_modules'] = !empty($enabled_modules) ? $enabled_modules : null;
$business->fill($business_details);
$business->save();
//update session data
$request->session()->put('business', $business);
//Update Currency details
$currency = Currency::find($business->currency_id);
$request->session()->put('currency', [
'id' => $currency->id,
'code' => $currency->code,
'symbol' => $currency->symbol,
'thousand_separator' => $currency->thousand_separator,
'decimal_separator' => $currency->decimal_separator,
]);
//update current financial year to session
$financial_year = $this->businessUtil->getCurrentFinancialYear($business->id);
$request->session()->put('financial_year', $financial_year);
$output = ['success' => 1,
'msg' => __('business.settings_updated_success')
];
} catch (\Exception $e) {
\Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());
$output = ['success' => 0,
'msg' => __('messages.something_went_wrong')
];
}
return redirect('business/settings')->with('status', $output);
}
/**
* Handles the validation email
*
* @return \Illuminate\Http\Response
*/
public function postCheckEmail(Request $request)
{
$email = $request->input('email');
$query = User::where('email', $email);
if (!empty($request->input('user_id'))) {
$user_id = $request->input('user_id');
$query->where('id', '!=', $user_id);
}
$exists = $query->exists();
if (!$exists) {
echo "true";
exit;
} else {
echo "false";
exit;
}
}
public function getEcomSettings()
{
try {
$api_token = request()->header('API-TOKEN');
$api_settings = $this->moduleUtil->getApiSettings($api_token);
$settings = Business::where('id', $api_settings->business_id)
->value('ecom_settings');
$settings_array = !empty($settings) ? json_decode($settings, true) : [];
if (!empty($settings_array['slides'])) {
foreach ($settings_array['slides'] as $key => $value) {
$settings_array['slides'][$key]['image_url'] = !empty($value['image']) ? url('uploads/img/' . $value['image']) : '';
}
}
} catch (\Exception $e) {
\Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());
return $this->respondWentWrong($e);
}
return $this->respond($settings_array);
}
/**
* Handles the testing of email configuration
*
* @return \Illuminate\Http\Response
*/
public function testEmailConfiguration(Request $request)
{
try {
$email_settings = $request->input();
$data['email_settings'] = $email_settings;
\Notification::route('mail', $email_settings['mail_from_address'])
->notify(new TestEmailNotification($data));
$output = [
'success' => 1,
'msg' => __('lang_v1.email_tested_successfully')
];
} catch (\Exception $e) {
\Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());
$output = [
'success' => 0,
'msg' => $e->getMessage()
];
}
return $output;
}
/**
* Handles the testing of sms configuration
*
* @return \Illuminate\Http\Response
*/
public function testSmsConfiguration(Request $request)
{
try {
$sms_settings = $request->input();
$data = [
'sms_settings' => $sms_settings,
'mobile_number' => $sms_settings['test_number'],
'sms_body' => 'This is a test SMS',
];
if (!empty($sms_settings['test_number'])) {
$response = $this->businessUtil->sendSms($data);
} else {
$response = __('lang_v1.test_number_is_required');
}
$output = [
'success' => 1,
'msg' => $response
];
} catch (\Exception $e) {
\Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());
$output = [
'success' => 0,
'msg' => $e->getMessage()
];
}
return $output;
}
}