some bug fix in order archive, bank transfer and ...
This commit is contained in:
parent
3908830417
commit
638a386fe6
|
@ -4,6 +4,10 @@ namespace App\Controller;
|
||||||
|
|
||||||
use App\Entity\HesabdariDoc;
|
use App\Entity\HesabdariDoc;
|
||||||
use App\Entity\HesabdariRow;
|
use App\Entity\HesabdariRow;
|
||||||
|
use App\Entity\BankAccount;
|
||||||
|
use App\Entity\Salary;
|
||||||
|
use App\Entity\Cashdesk;
|
||||||
|
use App\Entity\HesabdariTable;
|
||||||
use App\Service\Access;
|
use App\Service\Access;
|
||||||
use App\Service\Log;
|
use App\Service\Log;
|
||||||
use App\Service\Provider;
|
use App\Service\Provider;
|
||||||
|
@ -17,70 +21,184 @@ use Symfony\Component\Routing\Annotation\Route;
|
||||||
class TransferController extends AbstractController
|
class TransferController extends AbstractController
|
||||||
{
|
{
|
||||||
#[Route('/api/transfer/search', name: 'app_transfer_search')]
|
#[Route('/api/transfer/search', name: 'app_transfer_search')]
|
||||||
public function app_transfer_search(Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse
|
public function app_transfer_search(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
|
||||||
{
|
{
|
||||||
$acc = $access->hasRole('bankTransfer');
|
$acc = $access->hasRole('bankTransfer');
|
||||||
if(!$acc)
|
if (!$acc)
|
||||||
throw $this->createAccessDeniedException();
|
throw $this->createAccessDeniedException();
|
||||||
$items = $entityManager->getRepository(HesabdariDoc::class)->findBy([
|
$items = $entityManager->getRepository(HesabdariDoc::class)->findBy(
|
||||||
'bid'=>$acc['bid'],
|
[
|
||||||
'type'=>'transfer',
|
'bid' => $acc['bid'],
|
||||||
'year'=>$acc['year'],
|
'type' => 'transfer',
|
||||||
'money'=> $acc['money']
|
'year' => $acc['year'],
|
||||||
],
|
'money' => $acc['money']
|
||||||
['dateSubmit'=>'DESC']);
|
],
|
||||||
|
['dateSubmit' => 'DESC']
|
||||||
|
);
|
||||||
$resp = [];
|
$resp = [];
|
||||||
foreach ($items as $item){
|
foreach ($items as $item) {
|
||||||
$temp = [];
|
$temp = [];
|
||||||
$temp['submitter']= $item->getSubmitter()->getFullName();
|
$temp['submitter'] = $item->getSubmitter()->getFullName();
|
||||||
$temp['code']= $item->getCode();
|
$temp['code'] = $item->getCode();
|
||||||
$temp['date']= $item->getDate();
|
$temp['date'] = $item->getDate();
|
||||||
$temp['des']= $item->getDes();
|
$temp['des'] = $item->getDes();
|
||||||
$temp['amount']= $item->getAmount();
|
$temp['amount'] = $item->getAmount();
|
||||||
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy([
|
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy([
|
||||||
'doc'=>$item
|
'doc' => $item
|
||||||
]);
|
]);
|
||||||
$fromType = '';
|
$fromType = '';
|
||||||
$fromObject = '';
|
$fromObject = '';
|
||||||
$toType = '';
|
$toType = '';
|
||||||
$toObject = '';
|
$toObject = '';
|
||||||
foreach ($rows as $row){
|
foreach ($rows as $row) {
|
||||||
if($row->getBs()!=0){
|
if ($row->getBs() != 0) {
|
||||||
//it is from
|
//it is from
|
||||||
if($row->getBank()){
|
if ($row->getBank()) {
|
||||||
$fromType = 'bank';
|
$fromType = 'bank';
|
||||||
$fromObject = $row->getBank()->getName();
|
$fromObject = $row->getBank()->getName();
|
||||||
}
|
} elseif ($row->getSalary()) {
|
||||||
elseif($row->getSalary()){
|
|
||||||
$fromType = 'salary';
|
$fromType = 'salary';
|
||||||
$fromObject = $row->getSalary()->getName();
|
$fromObject = $row->getSalary()->getName();
|
||||||
}
|
} elseif ($row->getCashdesk()) {
|
||||||
elseif($row->getCashdesk()){
|
|
||||||
$fromType = 'cashDesk';
|
$fromType = 'cashDesk';
|
||||||
$fromObject = $row->getCashdesk()->getName();
|
$fromObject = $row->getCashdesk()->getName();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else{
|
if ($row->getBank()) {
|
||||||
if($row->getBank()){
|
|
||||||
$toType = 'bank';
|
$toType = 'bank';
|
||||||
$toObject = $row->getBank()->getName();
|
$toObject = $row->getBank()->getName();
|
||||||
}
|
} elseif ($row->getSalary()) {
|
||||||
elseif($row->getSalary()){
|
|
||||||
$toType = 'salary';
|
$toType = 'salary';
|
||||||
$toObject = $row->getSalary()->getName();
|
$toObject = $row->getSalary()->getName();
|
||||||
}
|
} elseif ($row->getCashdesk()) {
|
||||||
elseif($row->getCashdesk()){
|
|
||||||
$toType = 'cashDesk';
|
$toType = 'cashDesk';
|
||||||
$toObject = $row->getCashdesk()->getName();
|
$toObject = $row->getCashdesk()->getName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$temp['fromType']= $fromType;
|
$temp['fromType'] = $fromType;
|
||||||
$temp['fromObject']= $fromObject;
|
$temp['fromObject'] = $fromObject;
|
||||||
$temp['toType']= $toType;
|
$temp['toType'] = $toType;
|
||||||
$temp['toObject']= $toObject;
|
$temp['toObject'] = $toObject;
|
||||||
$resp[] = $temp;
|
$resp[] = $temp;
|
||||||
}
|
}
|
||||||
return $this->json($resp);
|
return $this->json($resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Route('/api/transfer/insert', name: 'app_transfer_insert')]
|
||||||
|
public function app_transfer_insert(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
|
||||||
|
{
|
||||||
|
$acc = $access->hasRole('bankTransfer');
|
||||||
|
if (!$acc)
|
||||||
|
throw $this->createAccessDeniedException();
|
||||||
|
|
||||||
|
$params = [];
|
||||||
|
if ($content = $request->getContent()) {
|
||||||
|
$params = json_decode($content, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!array_key_exists('date', $params) || !array_key_exists('des', $params))
|
||||||
|
throw $this->createNotFoundException('some params mistake');
|
||||||
|
|
||||||
|
if (array_key_exists('update', $params) && $params['update'] != '') {
|
||||||
|
$doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([
|
||||||
|
'bid' => $acc['bid'],
|
||||||
|
'year' => $acc['year'],
|
||||||
|
'code' => $params['update'],
|
||||||
|
'money' => $acc['money']
|
||||||
|
]);
|
||||||
|
if (!$doc)
|
||||||
|
throw $this->createNotFoundException('document not found.');
|
||||||
|
$doc->setDes($params['des']);
|
||||||
|
$doc->setDate($params['date']);
|
||||||
|
$doc->setMoney($acc['money']);
|
||||||
|
|
||||||
|
$entityManager->persist($doc);
|
||||||
|
$entityManager->flush();
|
||||||
|
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy([
|
||||||
|
'doc' => $doc
|
||||||
|
]);
|
||||||
|
foreach ($rows as $row)
|
||||||
|
$entityManager->remove($row);
|
||||||
|
} else {
|
||||||
|
$doc = new HesabdariDoc();
|
||||||
|
$doc->setBid($acc['bid']);
|
||||||
|
$doc->setYear($acc['year']);
|
||||||
|
$doc->setDes($params['des']);
|
||||||
|
$doc->setDateSubmit(time());
|
||||||
|
$doc->setType('transfer');
|
||||||
|
$doc->setDate($params['date']);
|
||||||
|
$doc->setSubmitter($this->getUser());
|
||||||
|
$doc->setMoney($acc['money']);
|
||||||
|
$doc->setCode($provider->getAccountingCode($acc['bid'], 'accounting'));
|
||||||
|
$entityManager->persist($doc);
|
||||||
|
$entityManager->flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
$amount = 0;
|
||||||
|
foreach ($params['rows'] as $row) {
|
||||||
|
$row['bs'] = str_replace(',', '', $row['bs']);
|
||||||
|
$row['bd'] = str_replace(',', '', $row['bd']);
|
||||||
|
|
||||||
|
$hesabdariRow = new HesabdariRow();
|
||||||
|
$hesabdariRow->setBid($acc['bid']);
|
||||||
|
$hesabdariRow->setYear($acc['year']);
|
||||||
|
$hesabdariRow->setDoc($doc);
|
||||||
|
$hesabdariRow->setBs($row['bs']);
|
||||||
|
$hesabdariRow->setBd($row['bd']);
|
||||||
|
$hesabdariRow->setDes($row['des']);
|
||||||
|
$hesabdariRow->setReferral($row['referral']);
|
||||||
|
if ($row['type'] == 'bank') {
|
||||||
|
$bank = $entityManager->getRepository(BankAccount::class)->findOneBy([
|
||||||
|
'id' => $row['id'],
|
||||||
|
'bid' => $acc['bid']
|
||||||
|
]);
|
||||||
|
if (!$bank)
|
||||||
|
throw $this->createNotFoundException('bank not found');
|
||||||
|
$hesabdariRow->setBank($bank);
|
||||||
|
$hesabdariRow->setRef($entityManager->getRepository(HesabdariTable::class)->findOneBy(['code' => '5']));
|
||||||
|
|
||||||
|
} elseif ($row['type'] == 'salary') {
|
||||||
|
$salary = $entityManager->getRepository(Salary::class)->findOneBy([
|
||||||
|
'id' => $row['id'],
|
||||||
|
'bid' => $acc['bid']
|
||||||
|
]);
|
||||||
|
if (!$salary)
|
||||||
|
throw $this->createNotFoundException('salary not found');
|
||||||
|
$hesabdariRow->setSalary($salary);
|
||||||
|
$hesabdariRow->setRef($entityManager->getRepository(HesabdariTable::class)->findOneBy(['code' => '122']));
|
||||||
|
|
||||||
|
} elseif ($row['type'] == 'cashdesk') {
|
||||||
|
$cashdesk = $entityManager->getRepository(Cashdesk::class)->findOneBy([
|
||||||
|
'id' => $row['id'],
|
||||||
|
'bid' => $acc['bid']
|
||||||
|
]);
|
||||||
|
if (!$cashdesk)
|
||||||
|
throw $this->createNotFoundException('cashdesk not found');
|
||||||
|
$hesabdariRow->setCashdesk($cashdesk);
|
||||||
|
$hesabdariRow->setRef($entityManager->getRepository(HesabdariTable::class)->findOneBy(['code' => '121']));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$entityManager->persist($hesabdariRow);
|
||||||
|
$amount += $row['bs'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$doc->setAmount($amount);
|
||||||
|
$entityManager->persist($doc);
|
||||||
|
$entityManager->flush();
|
||||||
|
|
||||||
|
$log->insert(
|
||||||
|
'حسابداری',
|
||||||
|
'سند انتقال وجه شماره ' . $doc->getCode() . ' ثبت / ویرایش شد.',
|
||||||
|
$this->getUser(),
|
||||||
|
$request->headers->get('activeBid'),
|
||||||
|
$doc
|
||||||
|
);
|
||||||
|
|
||||||
|
return $this->json([
|
||||||
|
'result' => 1,
|
||||||
|
'doc' => $provider->Entity2Array($doc, 0)
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<h3 class="mx-5">
|
<h3 class="mx-5">
|
||||||
متاسفانه پرداخت ناموفق بود!
|
متاسفانه پرداخت ناموفق بود!
|
||||||
</h3>
|
</h3>
|
||||||
<a class="btn btn-lg btn-success mt-4" href="{{ twigFunctions.systemSettings().appSite }}/profile/dashboard">
|
<a class="btn btn-lg btn-success mt-4" href="{{ twigFunctions.systemSettings().appSite }}/u/profile/dashboard">
|
||||||
<i class="bi bi-buy"></i>
|
<i class="bi bi-buy"></i>
|
||||||
بازگشت به پروفایل کاربری
|
بازگشت به پروفایل کاربری
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<h3 class="mx-5">
|
<h3 class="mx-5">
|
||||||
با تشکر از پرداخت شما. سفارش شما اعمال شد.
|
با تشکر از پرداخت شما. سفارش شما اعمال شد.
|
||||||
</h3>
|
</h3>
|
||||||
<a class="btn btn-lg btn-success mt-4" href="{{ twigFunctions.systemSettings().appSite }}/profile/dashboard">
|
<a class="btn btn-lg btn-success mt-4" href="{{ twigFunctions.systemSettings().appSite }}/u/profile/dashboard">
|
||||||
<i class="bi bi-buy"></i>
|
<i class="bi bi-buy"></i>
|
||||||
بازگشت به پروفایل کاربری
|
بازگشت به پروفایل کاربری
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -41,16 +41,15 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
displayDate: this.modelValue, // مقداردهی اولیه از prop
|
displayDate: '', // مقداردهی اولیه خالی
|
||||||
pickerActive: false, // کنترل باز شدن تقویم
|
pickerActive: false,
|
||||||
minDatePersian: '', // تاریخ شروع سال مالی (شمسی برای پکیج)
|
minDatePersian: '',
|
||||||
maxDatePersian: '', // تاریخ پایان سال مالی (شمسی برای پکیج)
|
maxDatePersian: '',
|
||||||
uniqueId: '', // شناسه یکتا برای هر نمونه
|
uniqueId: '',
|
||||||
isInitialized: false, // فلگ برای کنترل مقداردهی اولیه
|
isInitialized: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
// ایجاد شناسه یکتا برای هر نمونه از کامپوننت
|
|
||||||
this.uniqueId = Math.random().toString(36).substring(2, 15);
|
this.uniqueId = Math.random().toString(36).substring(2, 15);
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
@ -62,7 +61,7 @@ export default {
|
||||||
modelValue: {
|
modelValue: {
|
||||||
immediate: true,
|
immediate: true,
|
||||||
handler(newVal) {
|
handler(newVal) {
|
||||||
if (newVal && newVal !== this.displayDate) {
|
if (newVal) {
|
||||||
this.displayDate = newVal;
|
this.displayDate = newVal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,8 +77,8 @@ export default {
|
||||||
this.minDatePersian = response.data.start;
|
this.minDatePersian = response.data.start;
|
||||||
this.maxDatePersian = response.data.end;
|
this.maxDatePersian = response.data.end;
|
||||||
|
|
||||||
// فقط اگر مقدار اولیه نداریم، از تاریخ جاری استفاده کنیم
|
// فقط اگر مقدار اولیه نداریم و هنوز مقداردهی نشده، از تاریخ جاری استفاده کنیم
|
||||||
if (!this.modelValue && !this.isInitialized) {
|
if (!this.modelValue && !this.displayDate && !this.isInitialized) {
|
||||||
this.displayDate = response.data.now;
|
this.displayDate = response.data.now;
|
||||||
this.$emit('update:modelValue', response.data.now);
|
this.$emit('update:modelValue', response.data.now);
|
||||||
this.isInitialized = true;
|
this.isInitialized = true;
|
||||||
|
|
|
@ -268,7 +268,9 @@ const fa_lang = {
|
||||||
count: "تعداد",
|
count: "تعداد",
|
||||||
},
|
},
|
||||||
dialog: {
|
dialog: {
|
||||||
|
download: 'دانلود',
|
||||||
delete_group: 'حذف گروهی',
|
delete_group: 'حذف گروهی',
|
||||||
|
add_new_transfer: 'سند انتقال جدید',
|
||||||
acc_price: 'مبلغ',
|
acc_price: 'مبلغ',
|
||||||
des: 'شرح',
|
des: 'شرح',
|
||||||
warning: 'هشدار',
|
warning: 'هشدار',
|
||||||
|
|
|
@ -1,57 +1,88 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="block block-content-full ">
|
<div class="d-flex flex-column">
|
||||||
<div id="fixed-header" class="block-header block-header-default bg-gray-light pt-2 pb-1">
|
<v-toolbar title="سفارش فضای ذخیره سازی" color="toolbar">
|
||||||
<h3 class="block-title text-primary-dark">
|
<template v-slot:prepend>
|
||||||
<button @click="$router.back()" type="button"
|
<v-btn icon @click="$router.back()">
|
||||||
class="float-start d-none d-sm-none d-md-block btn btn-sm btn-link text-warning">
|
<v-icon>mdi-arrow-right</v-icon>
|
||||||
<i class="fa fw-bold fa-arrow-right"></i>
|
</v-btn>
|
||||||
</button>
|
</template>
|
||||||
<i class="fa fa-shopping-bag px-2"></i>
|
<v-spacer></v-spacer>
|
||||||
سفارش فضای ذخیره سازی
|
<v-btn
|
||||||
</h3>
|
:loading="loading"
|
||||||
<div class="block-options">
|
:disabled="loading"
|
||||||
<button :disabled="this.loading" @click="this.submit()" type="button" class="btn btn-sm btn-primary">
|
@click="submit()"
|
||||||
<div v-show="this.loading" class="spinner-grow spinner-grow-sm me-2" role="status">
|
color="success"
|
||||||
<span class="visually-hidden">Loading...</span>
|
prepend-icon="mdi-credit-card-check"
|
||||||
</div>
|
variant="elevated"
|
||||||
<i class="fa fa-bank"></i>
|
class="px-4"
|
||||||
پرداخت آنلاین
|
>
|
||||||
</button>
|
<template v-slot:prepend>
|
||||||
</div>
|
<v-icon size="20" class="ml-2"></v-icon>
|
||||||
</div>
|
</template>
|
||||||
<div class="block-content pt-1 pb-3">
|
پرداخت آنلاین
|
||||||
<div class="row">
|
<v-tooltip activator="parent" location="bottom">
|
||||||
<div class="col-sm-12 col-md-12 p-1">
|
پرداخت آنلاین از طریق درگاه بانکی
|
||||||
<div class="alert">
|
</v-tooltip>
|
||||||
برای سفارش فضای ذخیره سازی ابتدا حجم مورد نظر را انتخاب و روی دکمه پرداخت کلیک کنید.
|
</v-btn>
|
||||||
</div>
|
</v-toolbar>
|
||||||
</div>
|
|
||||||
<div class="row">
|
<v-container>
|
||||||
<div class="col-12">
|
<v-alert
|
||||||
<label for="customRange3" class="form-label">فضای مورد نیاز بر حسب گیگابایت:</label>
|
type="info"
|
||||||
<input :disabled="this.loading" v-model="this.space" type="range" class="form-range" min="1" max="5"
|
class="mb-4"
|
||||||
step="1" id="customRange3">
|
>
|
||||||
</div>
|
برای سفارش فضای ذخیره سازی ابتدا حجم مورد نظر را انتخاب و روی دکمه پرداخت کلیک کنید.
|
||||||
<div class="col">
|
</v-alert>
|
||||||
<label>فضا(گیگابایت)</label>
|
|
||||||
<input type="text" class="form-control" v-model="this.space" readonly="readonly" />
|
<v-row>
|
||||||
</div>
|
<v-col cols="12">
|
||||||
<div class="col">
|
<v-label>فضای مورد نیاز بر حسب گیگابایت:</v-label>
|
||||||
<label>زمان</label>
|
<v-slider
|
||||||
<select :disabled="this.loading" v-model="this.month" class="form-select" aria-label="ماه">
|
v-model="space"
|
||||||
<option value="1" selected>یک ماه</option>
|
:disabled="loading"
|
||||||
<option value="3">سه ماه</option>
|
min="1"
|
||||||
<option value="6">شش ماه</option>
|
max="5"
|
||||||
<option value="12">یک سال</option>
|
step="1"
|
||||||
</select>
|
thumb-label
|
||||||
</div>
|
class="mt-2"
|
||||||
<div class="col">
|
></v-slider>
|
||||||
<label>مبلغ نهایی (ریال)</label>
|
</v-col>
|
||||||
<input type="text" class="form-control text-danger" v-model="this.priceTotal" readonly="readonly" />
|
|
||||||
</div>
|
<v-col cols="12" sm="4">
|
||||||
</div>
|
<v-text-field
|
||||||
</div>
|
v-model="space"
|
||||||
</div>
|
label="فضا (گیگابایت)"
|
||||||
|
readonly
|
||||||
|
variant="outlined"
|
||||||
|
></v-text-field>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
|
<v-col cols="12" sm="4">
|
||||||
|
<v-select
|
||||||
|
v-model="month"
|
||||||
|
:disabled="loading"
|
||||||
|
:items="[
|
||||||
|
{ title: 'یک ماه', value: 1 },
|
||||||
|
{ title: 'سه ماه', value: 3 },
|
||||||
|
{ title: 'شش ماه', value: 6 },
|
||||||
|
{ title: 'یک سال', value: 12 }
|
||||||
|
]"
|
||||||
|
label="زمان"
|
||||||
|
variant="outlined"
|
||||||
|
></v-select>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
|
<v-col cols="12" sm="4">
|
||||||
|
<v-text-field
|
||||||
|
v-model="priceTotal"
|
||||||
|
label="مبلغ نهایی (ریال)"
|
||||||
|
readonly
|
||||||
|
variant="outlined"
|
||||||
|
color="error"
|
||||||
|
></v-text-field>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-container>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -1,92 +1,81 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="block block-content-full ">
|
<v-toolbar color="grey-lighten-3" title="لیست سفارشات فضای ابری" density="compact" class="px-2">
|
||||||
<div id="fixed-header" class="block-header block-header-default bg-gray-light pt-2 pb-1">
|
<template v-slot:prepend>
|
||||||
<h3 class="block-title text-primary-dark">
|
<v-btn icon @click="$router.back()">
|
||||||
<button @click="$router.back()" type="button" class="float-start d-none d-sm-none d-md-block btn btn-sm btn-link text-warning">
|
<v-icon>mdi-arrow-right</v-icon>
|
||||||
<i class="fa fw-bold fa-arrow-right"></i>
|
</v-btn>
|
||||||
</button>
|
</template>
|
||||||
<i class="fa fa-list-dots px-2"></i>
|
</v-toolbar>
|
||||||
لیست سفارشات فضای ابری
|
<v-row>
|
||||||
</h3>
|
<v-col cols="12">
|
||||||
<div class="block-options">
|
<v-text-field v-model="searchValue" prepend-inner-icon="mdi-magnify" label="جست و جو ..." variant="outlined"
|
||||||
|
density="compact" hide-details :rounded="false" class=""></v-text-field>
|
||||||
|
|
||||||
</div>
|
<v-data-table :headers="headers" :items="items" :search="searchValue" :loading="loading"
|
||||||
</div>
|
loading-text="در حال بارگذاری..." no-data-text="اطلاعاتی برای نمایش وجود ندارد" items-per-page-text="تعداد سطر"
|
||||||
<div class="block-content pt-1 pb-3">
|
:items-per-page-options="[10, 25, 50, 100]" class="elevation-1" :header-props="{ class: 'custom-header' }">
|
||||||
<div class="row">
|
<template v-slot:item.status="{ item }">
|
||||||
<div class="col-sm-12 col-md-12 p-1">
|
<v-chip :color="item.status === 100 ? 'success' : 'error'" size="small">
|
||||||
<div class="my-2">
|
<v-icon start>
|
||||||
<div class="input-group input-group-sm">
|
{{ item.status === 100 ? 'mdi-check' : 'mdi-information' }}
|
||||||
<span class="input-group-text"><i class="fa fa-search"></i></span>
|
</v-icon>
|
||||||
<input v-model="searchValue" class="form-control" type="text" placeholder="جست و جو ...">
|
{{ item.status === 100 ? 'موفق' : 'پرداخت نشده' }}
|
||||||
</div>
|
</v-chip>
|
||||||
</div>
|
</template>
|
||||||
<EasyDataTable
|
|
||||||
:headers="headers"
|
<template v-slot:item.price="{ item }">
|
||||||
:items="items"
|
{{ $filters.formatNumber(item.price) }}
|
||||||
alternating
|
</template>
|
||||||
:search-value="searchValue"
|
|
||||||
theme-color="#1d90ff"
|
<template v-slot:item.cardPan="{ item }">
|
||||||
table-class-name="customize-table"
|
<span style="direction: ltr">{{ item.cardPan }}</span>
|
||||||
header-text-direction="center"
|
</template>
|
||||||
body-text-direction="center"
|
|
||||||
rowsPerPageMessage="تعداد سطر"
|
<template v-slot:item.gatePay="{ item }">
|
||||||
emptyMessage="اطلاعاتی برای نمایش وجود ندارد"
|
<v-chip v-if="item.gatePay === 'zarinpal'" color="warning" size="small">
|
||||||
rowsOfPageSeparatorMessage="از"
|
<v-avatar start>
|
||||||
:loading="loading"
|
<v-img src="/img/icons/zarinpal.png" width="16" height="16"></v-img>
|
||||||
>
|
</v-avatar>
|
||||||
<template #item-status="{ status }">
|
زرین پال
|
||||||
<span v-if="status == 100" class="text-success"><i class="fa fa-check me-2"></i>موفق</span>
|
</v-chip>
|
||||||
<span v-else class="text-danger"><i class="fa fa-info me-2"></i>پرداخت نشده</span>
|
<v-chip v-else color="error" size="small">
|
||||||
</template>
|
سایر
|
||||||
<template #item-price="{ price }">
|
</v-chip>
|
||||||
<span class="">{{ $filters.formatNumber(price)}}</span>
|
</template>
|
||||||
</template>
|
</v-data-table>
|
||||||
<template #item-cardPan="{ cardPan }">
|
</v-col>
|
||||||
<span style="direction:ltr" class="">{{cardPan}}</span>
|
</v-row>
|
||||||
</template>
|
|
||||||
<template #item-gatePay="{ gatePay }">
|
|
||||||
<span class="text-warning" v-if="gatePay == 'zarinpal'">
|
|
||||||
<img src="/img/icons/zarinpal.png" class="img-avatar img-avatar16" />
|
|
||||||
زرین پال
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</EasyDataTable>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import Swal from "sweetalert2";
|
import Swal from "sweetalert2";
|
||||||
import {ref} from "vue";
|
import { ref } from "vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "orders_list",
|
name: "orders_list",
|
||||||
data: ()=>{return {
|
data: () => ({
|
||||||
searchValue: '',
|
searchValue: '',
|
||||||
loading: ref(true),
|
loading: ref(true),
|
||||||
items:[],
|
items: [],
|
||||||
headers: [
|
headers: [
|
||||||
{ text: "تاریخ", value: "dateSubmit" },
|
{ title: "تاریخ", key: "dateSubmit", align: "center" },
|
||||||
{ text: "وضعیت", value: "status"},
|
{ title: "وضعیت", key: "status", align: "center" },
|
||||||
{ text: "مبلغ (ریال)", value: "price"},
|
{ title: "مبلغ (ریال)", key: "price", align: "center" },
|
||||||
{ text: "توضیحات", value: "des"},
|
{ title: "توضیحات", key: "des", align: "center" },
|
||||||
{ text: "شماره کارت", value: "cardPan"},
|
{ title: "شماره کارت", key: "cardPan", align: "center" },
|
||||||
{ text: "شماره پیگیری", value: "refID"},
|
{ title: "شماره پیگیری", key: "refID", align: "center" },
|
||||||
{ text: "درگاه پرداخت", value: "gatePay"},
|
{ title: "درگاه پرداخت", key: "gatePay", align: "center" },
|
||||||
],
|
],
|
||||||
}},
|
}),
|
||||||
methods: {
|
methods: {
|
||||||
loadData(){
|
loadData() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
axios.post('/api/archive/orders/list')
|
axios.post('/api/archive/orders/list')
|
||||||
.then((response)=>{
|
.then((response) => {
|
||||||
this.items = response.data;
|
this.items = response.data;
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -96,5 +85,7 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.v-toolbar-title {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
|
@ -1,171 +1,180 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="block block-content-full ">
|
<v-toolbar color="toolbar" title="آرشیو فایلها">
|
||||||
<div id="fixed-header" class="block-header block-header-default bg-gray-light pt-2 pb-1">
|
<template v-slot:prepend>
|
||||||
<h3 class="block-title text-primary-dark">
|
<v-btn icon @click="$router.back()">
|
||||||
<button @click="$router.back()" type="button" class="float-start d-none d-sm-none d-md-block btn btn-sm btn-link text-warning">
|
<v-icon>mdi-arrow-right</v-icon>
|
||||||
<i class="fa fw-bold fa-arrow-right"></i>
|
</v-btn>
|
||||||
</button>
|
</template>
|
||||||
<i class="fa fa-folder-tree px-2"></i>
|
</v-toolbar>
|
||||||
آرشیو فایلها</h3>
|
<v-container fluid>
|
||||||
<div class="block-options">
|
<v-row>
|
||||||
|
<v-col cols="12" md="3">
|
||||||
</div>
|
<v-expansion-panels class="mb-1" :model-value="isMobile ? [] : [0]">
|
||||||
</div>
|
<v-expansion-panel>
|
||||||
<div class="block-content pt-1 pb-3">
|
<v-expansion-panel-title class="bg-primary text-white">
|
||||||
<div class="row">
|
<v-icon start>mdi-folder-tree</v-icon>
|
||||||
<div class="col-sm-12 col-md-3 p-1">
|
دسته بندی فایلها
|
||||||
<div class="list-group">
|
</v-expansion-panel-title>
|
||||||
<button class="list-group-item list-group-item-action active" aria-current="true">
|
<v-expansion-panel-text>
|
||||||
<i class="fa fa-folder-tree"></i>
|
<v-list density="compact" class="py-0">
|
||||||
دسته بندی فایلها
|
<v-list-item v-for="(category, index) in categories" :key="index" :title="category.title"
|
||||||
</button>
|
:value="category.value" @click="loadData(category.value)" class="py-1"></v-list-item>
|
||||||
<button type="button" @click="this.loadData('all')" class="list-group-item list-group-item-action">همه فایلها</button>
|
</v-list>
|
||||||
<button type="button" @click="this.loadData('accounting')" class="list-group-item list-group-item-action">اسناد حسابداری</button>
|
</v-expansion-panel-text>
|
||||||
<button type="button" @click="this.loadData('persons')" class="list-group-item list-group-item-action">اشخاص</button>
|
</v-expansion-panel>
|
||||||
<button type="button" @click="this.loadData('commodity')" class="list-group-item list-group-item-action">کالا</button>
|
</v-expansion-panels>
|
||||||
<button type="button" @click="this.loadData('bank')" class="list-group-item list-group-item-action">بانک</button>
|
</v-col>
|
||||||
<button type="button" @click="this.loadData('cashdesk')" class="list-group-item list-group-item-action">صندوق</button>
|
|
||||||
<button type="button" @click="this.loadData('salary')" class="list-group-item list-group-item-action">تنخواه</button>
|
<v-col cols="12" md="9">
|
||||||
<button type="button" @click="this.loadData('storeroom')" class="list-group-item list-group-item-action">انبار</button>
|
<v-text-field v-model="searchValue" prepend-inner-icon="mdi-magnify" label="جست و جو ..." variant="outlined"
|
||||||
<button type="button" @click="this.loadData('transfer')" class="list-group-item list-group-item-action">انتقال</button>
|
density="compact" :rounded="false"></v-text-field>
|
||||||
<button type="button" @click="this.loadData('persons_recive')" class="list-group-item list-group-item-action">دریافت</button>
|
|
||||||
<button type="button" @click="this.loadData('persns_send')" class="list-group-item list-group-item-action">پرداخت</button>
|
<v-data-table :headers="headers" :items="items" :search="searchValue" :loading="loading"
|
||||||
<button type="button" @click="this.loadData('income')" class="list-group-item list-group-item-action">درآمد</button>
|
loading-text="در حال بارگذاری..." no-data-text="اطلاعاتی برای نمایش وجود ندارد"
|
||||||
<button type="button" @click="this.loadData('cost')" class="list-group-item list-group-item-action">هزینه</button>
|
items-per-page-text="تعداد سطر" :items-per-page-options="[10, 20, 50, 100]" class="elevation-1 text-center"
|
||||||
<button type="button" @click="this.loadData('buy')" class="list-group-item list-group-item-action">خرید</button>
|
:header-props="{ class: 'custom-header' }">
|
||||||
<button type="button" @click="this.loadData('sell')" class="list-group-item list-group-item-action">فروش</button>
|
<template v-slot:item.operation="{ item }">
|
||||||
<button type="button" @click="this.loadData('onlinestore')" class="list-group-item list-group-item-action">فروشگاه آنلاین</button>
|
<v-menu>
|
||||||
</div>
|
<template v-slot:activator="{ props }">
|
||||||
</div>
|
<v-btn variant="text" size="small" color="error" icon="mdi-menu" v-bind="props" />
|
||||||
<div class="col-sm-12 col-md-9 p-0">
|
|
||||||
<div class="mb-1">
|
|
||||||
<div class="input-group input-group-sm">
|
|
||||||
<span class="input-group-text"><i class="fa fa-search"></i></span>
|
|
||||||
<input v-model="searchValue" class="form-control" type="text" placeholder="جست و جو ...">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<EasyDataTable table-class-name="customize-table"
|
|
||||||
show-index
|
|
||||||
alternating
|
|
||||||
:search-value="searchValue"
|
|
||||||
:headers="headers"
|
|
||||||
:items="items"
|
|
||||||
theme-color="#1d90ff"
|
|
||||||
header-text-direction="center"
|
|
||||||
body-text-direction="center"
|
|
||||||
rowsPerPageMessage="تعداد سطر"
|
|
||||||
emptyMessage="اطلاعاتی برای نمایش وجود ندارد"
|
|
||||||
rowsOfPageSeparatorMessage="از"
|
|
||||||
:loading = "loading"
|
|
||||||
>
|
|
||||||
<template #item-operation="{ id, filename,fileType}">
|
|
||||||
<a class="btn btn-link" href="/" @click.prevent="downloadFile(id,filename,fileType)">
|
|
||||||
<i class="fa fa-download"></i>
|
|
||||||
</a>
|
|
||||||
<button @click="deleteItem(id)" class="btn ms-2 btn-link text-danger">
|
|
||||||
<i class="fa fa-trash"></i>
|
|
||||||
</button>
|
|
||||||
</template>
|
</template>
|
||||||
<template #item-cat="{ cat }">
|
<v-list>
|
||||||
<span v-if="cat == 'accounting'">اسناد حسابداری</span>
|
<v-list-item class="text-dark" :title="$t('dialog.download')"
|
||||||
<span v-if="cat == 'persons'">اشخاص</span>
|
@click="downloadFile(item.id, item.filename, item.fileType)">
|
||||||
<span v-if="cat == 'commodity'">کالا</span>
|
<template v-slot:prepend>
|
||||||
<span v-if="cat == 'bank'">بانک</span>
|
<v-icon color="primary" icon="mdi-download" />
|
||||||
<span v-if="cat == 'cashdesk'">صندوق</span>
|
</template>
|
||||||
<span v-if="cat == 'salary'">تنخواه گردان</span>
|
</v-list-item>
|
||||||
<span v-if="cat == 'transfer'">انتقال</span>
|
<v-list-item class="text-dark" :title="$t('dialog.delete')" @click="deleteItem(item.id)">
|
||||||
<span v-if="cat == 'storeroom'">انبار</span>
|
<template v-slot:prepend>
|
||||||
<span v-if="cat == 'persons_recive'">دریافت</span>
|
<v-icon color="error" icon="mdi-delete" />
|
||||||
<span v-if="cat == 'persns_send'">پرداخت</span>
|
</template>
|
||||||
<span v-if="cat == 'income'">درآمد</span>
|
</v-list-item>
|
||||||
<span v-if="cat == 'cost'">هزینه</span>
|
</v-list>
|
||||||
<span v-if="cat == 'buy'">خرید</span>
|
</v-menu>
|
||||||
<span v-if="cat == 'sell'">فروش</span>
|
</template>
|
||||||
<span v-if="cat == 'onlinestore'">فروشگاه آنلاین</span>
|
|
||||||
</template>
|
<template v-slot:item.cat="{ item }">
|
||||||
<template #item-filePublic="{ filePublic }">
|
{{ getCategoryTitle(item.cat) }}
|
||||||
<i v-if="filePublic" class="text-success fa fa-check"></i>
|
</template>
|
||||||
<i v-else class="text-danger fa fa-close"></i>
|
|
||||||
</template>
|
<template v-slot:item.filePublic="{ item }">
|
||||||
</EasyDataTable>
|
<v-icon :color="item.filePublic ? 'success' : 'error'">
|
||||||
</div>
|
{{ item.filePublic ? 'mdi-check' : 'mdi-close' }}
|
||||||
</div>
|
</v-icon>
|
||||||
</div>
|
</template>
|
||||||
</div>
|
</v-data-table>
|
||||||
</template>
|
</v-col>
|
||||||
|
</v-row>
|
||||||
<script>
|
</v-container>
|
||||||
import axios from "axios";
|
</template>
|
||||||
import Swal from "sweetalert2";
|
|
||||||
import {ref} from "vue";
|
<script>
|
||||||
|
import axios from "axios";
|
||||||
export default {
|
import Swal from "sweetalert2";
|
||||||
name: "list",
|
|
||||||
data: ()=>{return {
|
export default {
|
||||||
searchValue: '',
|
name: "ArchiveFiles",
|
||||||
loading: ref(true),
|
data: () => ({
|
||||||
cat:'all',
|
searchValue: '',
|
||||||
items:[],
|
loading: true,
|
||||||
headers: [
|
cat: 'all',
|
||||||
{ text: "عملیات", value: "operation", width: "130"},
|
items: [],
|
||||||
{ text: "نام فایل", value: "filename", width: "100" },
|
categories: [
|
||||||
{ text: "نوع فایل", value: "fileType", width: "120"},
|
{ title: 'همه فایلها', value: 'all' },
|
||||||
{ text: "حجم (مگابایت)", value: "filesize", width: "100" },
|
{ title: 'اسناد حسابداری', value: 'accounting' },
|
||||||
{ text: "تاریخ ایجاد", value: "dateSubmit", width: "140"},
|
{ title: 'اشخاص', value: 'persons' },
|
||||||
{ text: "ایجاد کننده", value: "submitter", width: "140"},
|
{ title: 'کالا', value: 'commodity' },
|
||||||
{ text: "دسترسی عمومی", value: "filePublic", width: "120"},
|
{ title: 'بانک', value: 'bank' },
|
||||||
{ text: "دسته بندی", value: "cat", width: "120"},
|
{ title: 'صندوق', value: 'cashdesk' },
|
||||||
|
{ title: 'تنخواه', value: 'salary' },
|
||||||
]
|
{ title: 'انبار', value: 'storeroom' },
|
||||||
}},
|
{ title: 'انتقال', value: 'transfer' },
|
||||||
methods: {
|
{ title: 'دریافت', value: 'persons_recive' },
|
||||||
loadData(cat) {
|
{ title: 'پرداخت', value: 'persns_send' },
|
||||||
axios.post('/api/archive/list/' + cat)
|
{ title: 'درآمد', value: 'income' },
|
||||||
.then((response) => {
|
{ title: 'هزینه', value: 'cost' },
|
||||||
this.items = response.data;
|
{ title: 'خرید', value: 'buy' },
|
||||||
this.loading = false;
|
{ title: 'فروش', value: 'sell' },
|
||||||
})
|
{ title: 'فروشگاه آنلاین', value: 'onlinestore' }
|
||||||
},
|
],
|
||||||
deleteItem(id) {
|
headers: [
|
||||||
Swal.fire({
|
{ title: "عملیات", key: "operation", width: "130", align: "center" },
|
||||||
text: 'آیا برای حذف فایل مطمئن هستید؟',
|
{ title: "نام فایل", key: "filename", width: "100", align: "center" },
|
||||||
showCancelButton: true,
|
{ title: "نوع فایل", key: "fileType", width: "120", align: "center" },
|
||||||
confirmButtonText: 'بله',
|
{ title: "حجم (مگابایت)", key: "filesize", width: "100", align: "center" },
|
||||||
cancelButtonText: `خیر`,
|
{ title: "تاریخ ایجاد", key: "dateSubmit", width: "140", align: "center" },
|
||||||
}).then((result) => {
|
{ title: "ایجاد کننده", key: "submitter", width: "140", align: "center" },
|
||||||
/* Read more about isConfirmed, isDenied below */
|
{ title: "دسترسی عمومی", key: "filePublic", width: "120", align: "center" },
|
||||||
if (result.isConfirmed) {
|
{ title: "دسته بندی", key: "cat", width: "120", align: "center" }
|
||||||
axios.post('api/archive/file/remove/' + id).then((response) => {
|
]
|
||||||
if (response.data.result == 1) {
|
}),
|
||||||
this.loadData(this.cat);
|
computed: {
|
||||||
Swal.fire({
|
isMobile() {
|
||||||
text: 'فایل با موفقیت حذف شد.',
|
return this.$vuetify.display.mobile;
|
||||||
icon: 'success',
|
|
||||||
confirmButtonText: 'قبول'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
downloadFile(id,filename,fileType) {
|
|
||||||
axios.post(this.$filters.getApiUrl() + '/api/archive/file/get/' + id, {responseType: "arraybuffer"})
|
|
||||||
.then(response => {
|
|
||||||
const blob = new Blob([response.data], {type: fileType});
|
|
||||||
const link = document.createElement('a');
|
|
||||||
link.href = URL.createObjectURL(blob);
|
|
||||||
link.download = filename;
|
|
||||||
link.click();
|
|
||||||
URL.revokeObjectURL(link.href);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
beforeMount() {
|
|
||||||
this.loadData(this.cat);
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
loadData(cat) {
|
||||||
|
this.loading = true;
|
||||||
|
axios.post('/api/archive/list/' + cat)
|
||||||
|
.then((response) => {
|
||||||
|
this.items = response.data;
|
||||||
|
this.cat = cat;
|
||||||
|
this.loading = false;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deleteItem(id) {
|
||||||
|
Swal.fire({
|
||||||
|
text: 'آیا برای حذف فایل مطمئن هستید؟',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: 'بله',
|
||||||
|
cancelButtonText: 'خیر',
|
||||||
|
}).then((result) => {
|
||||||
|
if (result.isConfirmed) {
|
||||||
|
axios.post('api/archive/file/remove/' + id).then((response) => {
|
||||||
|
if (response.data.result == 1) {
|
||||||
|
this.loadData(this.cat);
|
||||||
|
Swal.fire({
|
||||||
|
text: 'فایل با موفقیت حذف شد.',
|
||||||
|
icon: 'success',
|
||||||
|
confirmButtonText: 'قبول'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
downloadFile(id, filename, fileType) {
|
||||||
|
axios.get(this.$filters.getApiUrl() + '/api/archive/file/get/' + id, {
|
||||||
|
responseType: 'blob'
|
||||||
|
}).then(response => {
|
||||||
|
const url = window.URL.createObjectURL(new Blob([response.data]));
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = url;
|
||||||
|
link.setAttribute('download', filename);
|
||||||
|
document.body.appendChild(link);
|
||||||
|
link.click();
|
||||||
|
link.remove();
|
||||||
|
window.URL.revokeObjectURL(url);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getCategoryTitle(cat) {
|
||||||
|
const category = this.categories.find(c => c.value === cat);
|
||||||
|
return category ? category.title : cat;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.loadData(this.cat);
|
||||||
}
|
}
|
||||||
</script>
|
}
|
||||||
|
</script>
|
||||||
<style scoped>
|
|
||||||
|
<style scoped>
|
||||||
</style>
|
.v-list-item--active {
|
||||||
|
background-color: rgba(var(--v-theme-primary), 0.1);
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -35,6 +35,7 @@
|
||||||
class="mb-0 pt-0 rounded-0"
|
class="mb-0 pt-0 rounded-0"
|
||||||
hide-details="auto"
|
hide-details="auto"
|
||||||
density="compact"
|
density="compact"
|
||||||
|
:rounded="false"
|
||||||
:placeholder="$t('dialog.search_txt')"
|
:placeholder="$t('dialog.search_txt')"
|
||||||
clearable
|
clearable
|
||||||
>
|
>
|
||||||
|
|
|
@ -44,12 +44,10 @@
|
||||||
</v-menu>
|
</v-menu>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
|
|
||||||
<v-card>
|
<v-window v-model="tab">
|
||||||
<v-card-text>
|
|
||||||
<v-window v-model="tab">
|
|
||||||
<v-window-item value="input">
|
<v-window-item value="input">
|
||||||
<v-text-field v-model="searchValueInput" prepend-inner-icon="mdi-magnify" label="جست و جو" variant="outlined"
|
<v-text-field class="pt-1" v-model="searchValueInput" prepend-inner-icon="mdi-magnify" label="جست و جو" variant="outlined"
|
||||||
density="compact" class="mb-4"></v-text-field>
|
density="compact" :rounded="false"></v-text-field>
|
||||||
|
|
||||||
<v-data-table :headers="headersInput" :items="itemsInput" :search="searchValueInput" :loading="loading"
|
<v-data-table :headers="headersInput" :items="itemsInput" :search="searchValueInput" :loading="loading"
|
||||||
show-index density="comfortable" class="elevation-1" :header-props="{ class: 'custom-header' }">
|
show-index density="comfortable" class="elevation-1" :header-props="{ class: 'custom-header' }">
|
||||||
|
@ -72,8 +70,8 @@
|
||||||
</v-window-item>
|
</v-window-item>
|
||||||
|
|
||||||
<v-window-item value="output">
|
<v-window-item value="output">
|
||||||
<v-text-field v-model="searchValueOutput" prepend-inner-icon="mdi-magnify" label="جست و جو" variant="outlined"
|
<v-text-field class="pt-1" v-model="searchValueOutput" prepend-inner-icon="mdi-magnify" label="جست و جو" variant="outlined"
|
||||||
density="compact" class="mb-4"></v-text-field>
|
density="compact" :rounded="false"></v-text-field>
|
||||||
|
|
||||||
<v-data-table :headers="headersInput" :items="itemsOutput" :search="searchValueOutput" :loading="loading"
|
<v-data-table :headers="headersInput" :items="itemsOutput" :search="searchValueOutput" :loading="loading"
|
||||||
show-index density="comfortable" class="elevation-1" :header-props="{ class: 'custom-header' }">
|
show-index density="comfortable" class="elevation-1" :header-props="{ class: 'custom-header' }">
|
||||||
|
@ -95,8 +93,6 @@
|
||||||
</v-data-table>
|
</v-data-table>
|
||||||
</v-window-item>
|
</v-window-item>
|
||||||
</v-window>
|
</v-window>
|
||||||
</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -3,6 +3,15 @@ import { defineComponent } from 'vue';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import Swal from 'sweetalert2';
|
import Swal from 'sweetalert2';
|
||||||
|
|
||||||
|
interface FileItem {
|
||||||
|
id: number;
|
||||||
|
filename: string;
|
||||||
|
filesize: number;
|
||||||
|
dateSubmit: string;
|
||||||
|
fileType: string;
|
||||||
|
fileBin?: string;
|
||||||
|
}
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'archiveUpload',
|
name: 'archiveUpload',
|
||||||
props: {
|
props: {
|
||||||
|
@ -13,7 +22,7 @@ export default defineComponent({
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
dialog: false, // برای باز و بسته کردن دیالوگ
|
dialog: false, // برای باز و بسته کردن دیالوگ
|
||||||
fileStack: [],
|
fileStack: [] as FileItem[],
|
||||||
des: '',
|
des: '',
|
||||||
media: {
|
media: {
|
||||||
saved: [],
|
saved: [],
|
||||||
|
@ -26,6 +35,24 @@ export default defineComponent({
|
||||||
this.getFilesList();
|
this.getFilesList();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
getFileIconColor(fileType: string): string {
|
||||||
|
if (!fileType) return 'grey';
|
||||||
|
const type = fileType.toLowerCase();
|
||||||
|
if (type.includes('pdf')) return 'red';
|
||||||
|
if (type.includes('word') || type.includes('doc')) return 'blue';
|
||||||
|
if (type.includes('excel') || type.includes('sheet')) return 'green';
|
||||||
|
if (type.includes('image')) return 'purple';
|
||||||
|
return 'grey';
|
||||||
|
},
|
||||||
|
getFileIcon(fileType: string): string {
|
||||||
|
if (!fileType) return 'mdi-file';
|
||||||
|
const type = fileType.toLowerCase();
|
||||||
|
if (type.includes('pdf')) return 'mdi-file-pdf-box';
|
||||||
|
if (type.includes('word') || type.includes('doc')) return 'mdi-file-word-box';
|
||||||
|
if (type.includes('excel') || type.includes('sheet')) return 'mdi-file-excel-box';
|
||||||
|
if (type.includes('image')) return 'mdi-file-image-box';
|
||||||
|
return 'mdi-file';
|
||||||
|
},
|
||||||
changeMedia(media) {
|
changeMedia(media) {
|
||||||
this.media = media;
|
this.media = media;
|
||||||
},
|
},
|
||||||
|
@ -42,13 +69,15 @@ export default defineComponent({
|
||||||
}).then((resp) => {
|
}).then((resp) => {
|
||||||
this.media.added = [];
|
this.media.added = [];
|
||||||
this.fileStack = resp.data;
|
this.fileStack = resp.data;
|
||||||
this.fileStack.forEach((item) => {
|
this.fileStack.forEach((item: FileItem) => {
|
||||||
axios
|
if (item.fileType && item.fileType.startsWith('image/')) {
|
||||||
.post(`${this.$filters.getApiUrl()}/api/archive/file/get/${item.id}`, { responseType: 'arraybuffer' })
|
axios
|
||||||
.then((response) => {
|
.get(`${this.$filters.getApiUrl()}/api/archive/file/get/${item.id}`, { responseType: 'arraybuffer' })
|
||||||
const b64 = btoa(String.fromCharCode(...new Uint8Array(response.data)));
|
.then((response) => {
|
||||||
item.fileBin = `data:${response.headers['content-type']};base64,${b64}`;
|
const b64 = btoa(String.fromCharCode(...new Uint8Array(response.data)));
|
||||||
});
|
item.fileBin = `data:${response.headers['content-type']};base64,${b64}`;
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -74,19 +103,30 @@ export default defineComponent({
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
downloadFile(item) {
|
downloadFile(item) {
|
||||||
axios
|
axios.get(`${this.$filters.getApiUrl()}/api/archive/file/get/${item.id}`, {
|
||||||
.post(`${this.$filters.getApiUrl()}/api/archive/file/get/${item.id}`, { responseType: 'arraybuffer' })
|
responseType: 'blob'
|
||||||
.then((response) => {
|
}).then(response => {
|
||||||
const blob = new Blob([response.data], { type: item.fileType });
|
const url = window.URL.createObjectURL(new Blob([response.data]));
|
||||||
const link = document.createElement('a');
|
const link = document.createElement('a');
|
||||||
link.href = URL.createObjectURL(blob);
|
link.href = url;
|
||||||
link.download = item.filename;
|
link.setAttribute('download', item.filename);
|
||||||
link.click();
|
document.body.appendChild(link);
|
||||||
URL.revokeObjectURL(link.href);
|
link.click();
|
||||||
});
|
link.remove();
|
||||||
|
window.URL.revokeObjectURL(url);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
submitArchive() {
|
submitArchive() {
|
||||||
const formData = new FormData(document.getElementById('archive-file-upload'));
|
if (this.media.added.length === 0) {
|
||||||
|
Swal.fire({
|
||||||
|
text: 'لطفا حداقل یک فایل انتخاب کنید',
|
||||||
|
icon: 'warning',
|
||||||
|
confirmButtonText: 'قبول',
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const formData = new FormData(document.getElementById('archive-file-upload') as HTMLFormElement);
|
||||||
axios
|
axios
|
||||||
.post('/api/archive/file/save', formData, {
|
.post('/api/archive/file/save', formData, {
|
||||||
headers: {
|
headers: {
|
||||||
|
@ -133,7 +173,7 @@ export default defineComponent({
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
||||||
<!-- دیالوگ آرشیو -->
|
<!-- دیالوگ آرشیو -->
|
||||||
<v-dialog v-model="dialog" max-width="800" persistent>
|
<v-dialog v-model="dialog" max-width="800" scrollable>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-toolbar color="grey-lighten-4" flat>
|
<v-toolbar color="grey-lighten-4" flat>
|
||||||
<v-toolbar-title>
|
<v-toolbar-title>
|
||||||
|
@ -170,17 +210,27 @@ export default defineComponent({
|
||||||
outlined
|
outlined
|
||||||
name="des"
|
name="des"
|
||||||
class="mt-2"
|
class="mt-2"
|
||||||
></v-text-field>
|
hide-details
|
||||||
<v-btn type="submit" color="success" class="mt-2">
|
>
|
||||||
<v-icon left>mdi-content-save</v-icon>
|
<template v-slot:append>
|
||||||
بارگذاری فایلها
|
<v-btn
|
||||||
</v-btn>
|
type="submit"
|
||||||
|
color="success"
|
||||||
|
icon
|
||||||
|
variant="flat"
|
||||||
|
class="ml-2"
|
||||||
|
height="100%"
|
||||||
|
>
|
||||||
|
<v-icon>mdi-content-save</v-icon>
|
||||||
|
<v-tooltip activator="parent" location="bottom">
|
||||||
|
ثبت بارگذاری و ذخیره فایلها
|
||||||
|
</v-tooltip>
|
||||||
|
</v-btn>
|
||||||
|
</template>
|
||||||
|
</v-text-field>
|
||||||
</form>
|
</form>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
<v-divider class="my-4"></v-divider>
|
|
||||||
|
|
||||||
<!-- لیست فایلها -->
|
<!-- لیست فایلها -->
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12">
|
<v-col cols="12">
|
||||||
|
@ -190,7 +240,7 @@ export default defineComponent({
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-center">پیشنمایش</th>
|
<th class="text-center">پیشنمایش</th>
|
||||||
<th class="text-center">نام فایل</th>
|
<th class="text-center">نام فایل</th>
|
||||||
<th class="text-center">سایز فایل (مگابایت)</th>
|
<th class="text-center">سایز (MB)</th>
|
||||||
<th class="text-center">تاریخ</th>
|
<th class="text-center">تاریخ</th>
|
||||||
<th class="text-center">عملیات</th>
|
<th class="text-center">عملیات</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -198,18 +248,37 @@ export default defineComponent({
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr v-for="item in fileStack" :key="item.id">
|
<tr v-for="item in fileStack" :key="item.id">
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<v-img :src="item.fileBin" max-width="50" max-height="50" class="mx-auto" alt="پیشنمایش" />
|
<template v-if="item.fileType && item.fileType.startsWith('image/')">
|
||||||
|
<v-img
|
||||||
|
:src="item.fileBin"
|
||||||
|
max-width="50"
|
||||||
|
max-height="50"
|
||||||
|
class="mx-auto"
|
||||||
|
alt="پیشنمایش"
|
||||||
|
cover
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<v-icon
|
||||||
|
size="50"
|
||||||
|
:color="getFileIconColor(item.fileType)"
|
||||||
|
>
|
||||||
|
{{ getFileIcon(item.fileType) }}
|
||||||
|
</v-icon>
|
||||||
|
</template>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">{{ item.filename }}</td>
|
<td class="text-center">{{ item.filename }}</td>
|
||||||
<td class="text-center">{{ item.filesize }}</td>
|
<td class="text-center">{{ item.filesize }}</td>
|
||||||
<td class="text-center">{{ item.dateSubmit }}</td>
|
<td class="text-center">{{ item.dateSubmit }}</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<v-btn icon small color="primary" @click="downloadFile(item)">
|
<div class="d-flex justify-center">
|
||||||
<v-icon>mdi-download</v-icon>
|
<v-btn variant="text" color="primary" @click="downloadFile(item)" class="px-1">
|
||||||
</v-btn>
|
<v-icon>mdi-download</v-icon>
|
||||||
<v-btn icon small color="error" class="ml-2" @click="deleteItem(item)">
|
</v-btn>
|
||||||
<v-icon>mdi-trash-can</v-icon>
|
<v-btn variant="text" color="error" @click="deleteItem(item)" class="px-1">
|
||||||
</v-btn>
|
<v-icon>mdi-trash-can</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-if="fileStack.length === 0">
|
<tr v-if="fileStack.length === 0">
|
||||||
|
@ -226,4 +295,8 @@ export default defineComponent({
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
/* استایلهای اضافی اگه نیاز باشه */
|
/* استایلهای اضافی اگه نیاز باشه */
|
||||||
|
:deep(.v-table .v-table__wrapper > table > thead > tr > th) {
|
||||||
|
background-color: #1d90ff !important;
|
||||||
|
color: white !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
|
@ -1,121 +1,99 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="block block-content-full ">
|
<v-toolbar color="toolbar" title="انتقالات">
|
||||||
<div id="fixed-header" class="block-header block-header-default bg-gray-light pt-2 pb-1">
|
<template v-slot:prepend>
|
||||||
<h3 class="block-title text-primary-dark">
|
<v-tooltip :text="$t('dialog.back')" location="bottom">
|
||||||
<button @click="$router.back()" type="button" class="float-start d-none d-sm-none d-md-block btn btn-sm btn-link text-warning">
|
<template v-slot:activator="{ props }">
|
||||||
<i class="fa fw-bold fa-arrow-right"></i>
|
<v-btn v-bind="props" @click="$router.back()" class="d-none d-sm-flex" variant="text"
|
||||||
</button>
|
icon="mdi-arrow-right" />
|
||||||
<i class="fa fa-book"></i>
|
</template>
|
||||||
لیست انتقالها
|
</v-tooltip>
|
||||||
</h3>
|
</template>
|
||||||
<div class="block-options">
|
<v-spacer></v-spacer>
|
||||||
<router-link title="افزودن سند انتقال جدید" to="/acc/transfer/mod/" class="block-options-item">
|
|
||||||
<span class="fa fa-plus fw-bolder"></span>
|
<v-tooltip :text="$t('dialog.add_new_transfer')" location="bottom">
|
||||||
</router-link>
|
<template v-slot:activator="{ props }">
|
||||||
</div>
|
<v-btn v-bind="props" icon variant="text" color="primary" :to="'/acc/transfer/mod/'">
|
||||||
</div>
|
<v-icon>mdi-plus</v-icon>
|
||||||
<div class="block-content pt-1 pb-3">
|
</v-btn>
|
||||||
<div class="row">
|
</template>
|
||||||
<div class="col-sm-12 col-md-12 m-0 p-0">
|
</v-tooltip>
|
||||||
<div class="mb-1">
|
</v-toolbar>
|
||||||
<div class="input-group input-group-sm">
|
|
||||||
<span class="input-group-text"><i class="fa fa-search"></i></span>
|
<v-text-field v-model="searchValue" :rounded="false" prepend-inner-icon="mdi-magnify" variant="outlined" density="compact" hide-details
|
||||||
<input v-model="searchValue" class="form-control" type="text" placeholder="جست و جو ...">
|
placeholder="جست و جو ..." class=""></v-text-field>
|
||||||
</div>
|
|
||||||
</div>
|
<v-data-table :headers="headers" :items="items" :search="searchValue" :loading="loading" density="comfortable" hover
|
||||||
<EasyDataTable table-class-name="customize-table" show-index alternating :search-value="searchValue" :headers="headers" :items="items"
|
:header-props="{ class: 'custom-header' }">
|
||||||
theme-color="#1d90ff" header-text-direction="center" body-text-direction="center"
|
<template v-slot:item.operation="{ item }">
|
||||||
rowsPerPageMessage="تعداد سطر" emptyMessage="اطلاعاتی برای نمایش وجود ندارد" rowsOfPageSeparatorMessage="از"
|
<v-menu>
|
||||||
:loading="loading">
|
<template v-slot:activator="{ props }">
|
||||||
<template #item-operation="{ code, type }">
|
<v-btn icon variant="text" v-bind="props">
|
||||||
<div class="dropdown-center">
|
<v-icon>mdi-dots-vertical</v-icon>
|
||||||
<button aria-expanded="false" aria-haspopup="true" class="btn btn-sm btn-link"
|
</v-btn>
|
||||||
data-bs-toggle="dropdown" id="dropdown-align-center-alt-primary" type="button">
|
</template>
|
||||||
<i class="fa-solid fa-ellipsis"></i>
|
|
||||||
</button>
|
<v-list>
|
||||||
<div aria-labelledby="dropdown-align-center-outline-primary" class="dropdown-menu dropdown-menu-end"
|
<v-list-item :to="'/acc/accounting/view/' + item.code" prepend-icon="mdi-file-document text-success">
|
||||||
style="">
|
سند حسابداری
|
||||||
<router-link class="dropdown-item" :to="'/acc/accounting/view/' + code">
|
</v-list-item>
|
||||||
<i class="fa fa-file text-success pe-2"></i>
|
<v-list-item :to="'/acc/transfer/mod/' + item.code" prepend-icon="mdi-eye text-primary">
|
||||||
سند حسابداری
|
مشاهده
|
||||||
</router-link>
|
</v-list-item>
|
||||||
<!-- Button trigger modal -->
|
<v-list-item :to="'/acc/transfer/mod/' + item.code" prepend-icon="mdi-pencil">
|
||||||
<router-link :to="'/acc/transfer/mod/' + code" class="dropdown-item">
|
ویرایش
|
||||||
<i class="fa fa-eye text-primary pe-2"></i>
|
</v-list-item>
|
||||||
مشاهده
|
<v-list-item @click="deleteItem(item.code)" prepend-icon="mdi-delete text-error">
|
||||||
</router-link>
|
حذف
|
||||||
<router-link :to="'/acc/transfer/mod/' + code" class="dropdown-item">
|
</v-list-item>
|
||||||
<i class="fa fa-edit pe-2"></i>
|
</v-list>
|
||||||
ویرایش
|
</v-menu>
|
||||||
</router-link>
|
</template>
|
||||||
<button type="button" @click="deleteItem(code)" class="dropdown-item text-danger">
|
|
||||||
<i class="fa fa-trash pe-2"></i>
|
<template v-slot:item.fromType="{ item }">
|
||||||
حذف
|
<span v-if="item.fromType === 'bank'">حساب بانکی: {{ item.fromObject }}</span>
|
||||||
</button>
|
<span v-if="item.fromType === 'salary'">تنخواه گردان: {{ item.fromObject }}</span>
|
||||||
</div>
|
<span v-if="item.fromType === 'cashDesk'">صندوق: {{ item.fromObject }}</span>
|
||||||
</div>
|
</template>
|
||||||
</template>
|
|
||||||
<template #item-fromType="{ fromType, fromObject }">
|
<template v-slot:item.toType="{ item }">
|
||||||
<label v-if="fromType == 'bank'">حساب بانکی: {{ fromObject }}</label>
|
<span v-if="item.toType === 'bank'">حساب بانکی: {{ item.toObject }}</span>
|
||||||
<label v-if="fromType == 'salary'">تنخواه گردان: {{ fromObject }}</label>
|
<span v-if="item.toType === 'salary'">تنخواه گردان: {{ item.toObject }}</span>
|
||||||
<label v-if="fromType == 'cashDesk'">صندوق: {{ fromObject }}</label>
|
<span v-if="item.toType === 'cashDesk'">صندوق: {{ item.toObject }}</span>
|
||||||
</template>
|
</template>
|
||||||
<template #item-toType="{ toType, toObject }">
|
|
||||||
<label v-if="toType == 'bank'">حساب بانکی: {{ toObject }}</label>
|
<template v-slot:item.code="{ item }">
|
||||||
<label v-if="toType == 'salary'">تنخواه گردان: {{ toObject }}</label>
|
<v-btn variant="text" :to="'/acc/accounting/view/' + item.code" class="text-none">
|
||||||
<label v-if="toType == 'cashDesk'">صندوق: {{ toObject }}</label>
|
{{ item.code }}
|
||||||
</template>
|
</v-btn>
|
||||||
<template #item-code="{ code }">
|
</template>
|
||||||
<router-link class="btn-link" :to="'/acc/accounting/view/' + code">
|
</v-data-table>
|
||||||
{{ code }}
|
|
||||||
</router-link>
|
|
||||||
</template>
|
|
||||||
</EasyDataTable>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import Swal from "sweetalert2";
|
import Swal from "sweetalert2";
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "list",
|
name: "list",
|
||||||
components: {
|
data: () => ({
|
||||||
|
searchValue: '',
|
||||||
},
|
loading: ref(true),
|
||||||
data: () => {
|
items: [],
|
||||||
return {
|
headers: [
|
||||||
showTransferModal: {},
|
{ title: "عملیات", key: "operation", sortable: false },
|
||||||
transferQuickDoc:{},
|
{ title: "شماره سند", key: "code", sortable: true },
|
||||||
searchValue: '',
|
{ title: "تاریخ", key: "date", sortable: true },
|
||||||
loading: ref(true),
|
{ title: "از", key: "fromType", sortable: true },
|
||||||
items: [],
|
{ title: "به", key: "toType", sortable: true },
|
||||||
headers: [
|
{ title: "مبلغ", key: "amount", sortable: true },
|
||||||
{ text: "عملیات", value: "operation" },
|
{ title: "شرح", key: "des", sortable: true },
|
||||||
{ text: "شماره سند", value: "code", sortable: true },
|
{ title: "ثبت کننده", key: "submitter", sortable: true },
|
||||||
{ text: "تاریخ", value: "date", sortable: true },
|
]
|
||||||
{ text: "از", value: "fromType", sortable: true },
|
}),
|
||||||
{ text: "به", value: "toType", sortable: true },
|
|
||||||
{ text: "مبلغ", value: "amount", sortable: true },
|
|
||||||
{ text: "شرح", value: "des", sortable: true },
|
|
||||||
{ text: "ثبت کننده", value: "submitter", sortable: true },
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
showModal(code) {
|
|
||||||
var myModal = bootstrap.Modal.getOrCreateInstance(document.getElementById('quickTransferView'));
|
|
||||||
myModal.show();
|
|
||||||
},
|
|
||||||
hideModal() {
|
|
||||||
var myModal = bootstrap.Modal.getOrCreateInstance(document.getElementById('quickTransferView'));
|
|
||||||
myModal.hide();
|
|
||||||
},
|
|
||||||
loadData() {
|
loadData() {
|
||||||
axios.post('/api/transfer/search',)
|
axios.post('/api/transfer/search')
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
this.items = response.data;
|
this.items = response.data;
|
||||||
this.items.forEach((item) => {
|
this.items.forEach((item) => {
|
||||||
|
@ -131,20 +109,12 @@ export default {
|
||||||
confirmButtonText: 'بله',
|
confirmButtonText: 'بله',
|
||||||
cancelButtonText: `خیر`,
|
cancelButtonText: `خیر`,
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
/* Read more about isConfirmed, isDenied below */
|
|
||||||
if (result.isConfirmed) {
|
if (result.isConfirmed) {
|
||||||
axios.post('/api/accounting/remove', {
|
axios.post('/api/accounting/remove', {
|
||||||
'code': code
|
'code': code
|
||||||
}
|
}).then((response) => {
|
||||||
).then((response) => {
|
|
||||||
if (response.data.result == 1) {
|
if (response.data.result == 1) {
|
||||||
let index = 0;
|
this.items = this.items.filter(item => item.code !== code);
|
||||||
for (let z = 0; z < this.items.length; z++) {
|
|
||||||
index++;
|
|
||||||
if (this.items[z]['code'] == code) {
|
|
||||||
this.items.splice(index - 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
text: 'سند انتقال با موفقیت حذف شد.',
|
text: 'سند انتقال با موفقیت حذف شد.',
|
||||||
icon: 'success',
|
icon: 'success',
|
||||||
|
|
|
@ -1,270 +1,122 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="block block-content-full ">
|
<v-toolbar color="toolbar" :title="$t('drawer.transfer')">
|
||||||
<div id="fixed-header" class="block-header block-header-default bg-gray-light pt-2 pb-1">
|
<template v-slot:prepend>
|
||||||
<h3 class="block-title text-primary-dark">
|
<v-tooltip :text="$t('dialog.back')" location="bottom">
|
||||||
<button @click="$router.back()" type="button"
|
<template v-slot:activator="{ props }">
|
||||||
class="float-start d-none d-sm-none d-md-block btn btn-sm btn-link text-warning">
|
<v-btn v-bind="props" @click="$router.back()" class="d-none d-sm-flex" variant="text"
|
||||||
<i class="fa fw-bold fa-arrow-right"></i>
|
icon="mdi-arrow-right" />
|
||||||
</button>
|
</template>
|
||||||
انتقال
|
</v-tooltip>
|
||||||
</h3>
|
</template>
|
||||||
<div class="block-options">
|
<v-spacer></v-spacer>
|
||||||
<archive-upload v-if="this.$route.params.id != ''" :docid="this.$route.params.id" doctype="transfer"
|
|
||||||
cat="transfer"></archive-upload>
|
|
||||||
<button @click="save()" type="button" class="btn btn-sm btn-alt-primary"><i class="fa fa-save"></i> ثبت</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="block-content py-3 vl-parent">
|
|
||||||
<loading color="blue" loader="dots" v-model:active="isLoading" :is-full-page="false" />
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-12 col-md-6">
|
|
||||||
<div class="form-control">
|
|
||||||
<label class="form-label">تاریخ:</label>
|
|
||||||
<date-picker class="" v-model="this.date" format="jYYYY/jMM/jDD" display-format="jYYYY/jMM/jDD"
|
|
||||||
:min="this.year.start" :max="this.year.end" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-12 col-md-6">
|
|
||||||
<div class="form-floating mb-4">
|
|
||||||
<input v-model="this.des" class="form-control" type="text">
|
|
||||||
<label class="form-label">توضیحات</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-12 col-md-6">
|
|
||||||
<h3>از:</h3>
|
|
||||||
<div class="btn-group d-flex" role="group" aria-label="Basic radio toggle button group">
|
|
||||||
<input :checked="this.sideOne.content == 'bank'" @change="this.changeFrom('bank')" type="radio"
|
|
||||||
class="btn-check" name="btnradio" id="btnradio1" autocomplete="off" checked>
|
|
||||||
<label class="btn btn-outline-primary" for="btnradio1">بانک</label>
|
|
||||||
|
|
||||||
<input :checked="this.sideOne.content == 'cashdesk'" @change="this.changeFrom('cashdesk')" type="radio"
|
<archive-upload v-if="this.$route.params.id != ''" :docid="this.$route.params.id" doctype="transfer"
|
||||||
v-model="this.sideOne.content" class="btn-check" name="btnradio" id="btnradio2" autocomplete="off">
|
cat="transfer"></archive-upload>
|
||||||
<label class="btn btn-outline-primary" for="btnradio2">صندوق</label>
|
<v-tooltip :text="$t('dialog.save')" location="bottom">
|
||||||
|
<template v-slot:activator="{ props }">
|
||||||
|
<v-btn v-bind="props" color="primary" @click="save()" variant="text" icon="mdi-content-save" />
|
||||||
|
</template>
|
||||||
|
</v-tooltip>
|
||||||
|
|
||||||
<input :checked="this.sideOne.content == 'salary'" @change="this.changeFrom('salary')" type="radio"
|
</v-toolbar>
|
||||||
class="btn-check" name="btnradio" id="btnradio3" autocomplete="off">
|
<v-container>
|
||||||
<label class="btn btn-outline-primary" for="btnradio3">تنخواه</label>
|
<v-row>
|
||||||
</div>
|
<v-col cols="12" md="6">
|
||||||
<div class="row mt-2">
|
<Hdatepicker v-model="date" label="تاریخ" />
|
||||||
<div class="col-12">
|
</v-col>
|
||||||
<div v-if="this.sideOne.content == 'bank'" class="">
|
<v-col cols="12" md="6">
|
||||||
<label class="form-label">بانک</label>
|
<v-text-field v-model="this.des" label="توضیحات" variant="outlined"></v-text-field>
|
||||||
<div class="form-floating mb-2">
|
</v-col>
|
||||||
<v-cob dir="rtl" :options="banks" label="name" v-model="this.sideOne.bank">
|
</v-row>
|
||||||
<template #no-options="{ search, searching, loading }">
|
|
||||||
نتیجهای یافت نشد!
|
|
||||||
</template>
|
|
||||||
<template #option="option">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12">
|
|
||||||
<i class="fa fa-bank"></i>
|
|
||||||
{{ option.name }}
|
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
موجودی:
|
|
||||||
{{ $filters.formatNumber(option.balance) }}
|
|
||||||
<span class="text-danger" v-if="option.balance < 0">بدهکار</span>
|
|
||||||
<span class="text-success" v-if="option.balance > 0">بستانکار</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</v-cob>
|
|
||||||
|
|
||||||
</div>
|
<v-row>
|
||||||
</div>
|
<v-col cols="12" md="6">
|
||||||
<div v-if="this.sideOne.content == 'cashdesk'" class="">
|
<h3 class="text-primary text-h6 mb-4">از:</h3>
|
||||||
<label class="form-label">صندوق</label>
|
<v-btn-group class="divided mb-4" :border="true">
|
||||||
<div class="form-floating mb-2">
|
<v-btn :color="sideOne.type === 'bank' ? 'primary' : 'outlined'" @click="changeFrom('bank')">بانک</v-btn>
|
||||||
<v-cob dir="rtl" :options="cashdesks" label="name" v-model="this.sideOne.cashdesk">
|
<v-btn :color="sideOne.type === 'cashdesk' ? 'primary' : 'outlined'"
|
||||||
<template #no-options="{ search, searching, loading }">
|
@click="changeFrom('cashdesk')">صندوق</v-btn>
|
||||||
نتیجهای یافت نشد!
|
<v-btn :color="sideOne.type === 'salary' ? 'primary' : 'outlined'"
|
||||||
</template>
|
@click="changeFrom('salary')">تنخواه</v-btn>
|
||||||
<template #option="option">
|
</v-btn-group>
|
||||||
<div class="row">
|
|
||||||
<div class="col-12">
|
|
||||||
<i class="fa fa-bank"></i>
|
|
||||||
{{ option.name }}
|
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
موجودی:
|
|
||||||
{{ $filters.formatNumber(option.balance) }}
|
|
||||||
<span class="text-danger" v-if="option.balance < 0">بدهکار</span>
|
|
||||||
<span class="text-success" v-if="option.balance > 0">بستانکار</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</v-cob>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="this.sideOne.content == 'salary'" class="">
|
|
||||||
<label class="form-label">تنخواه گردان</label>
|
|
||||||
<div class="form-floating mb-2">
|
|
||||||
<v-cob dir="rtl" :options="salarys" label="name" v-model="this.sideOne.salary">
|
|
||||||
<template #no-options="{ search, searching, loading }">
|
|
||||||
نتیجهای یافت نشد!
|
|
||||||
</template>
|
|
||||||
<template #option="option">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12">
|
|
||||||
<i class="fa fa-bank"></i>
|
|
||||||
{{ option.name }}
|
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
موجودی:
|
|
||||||
{{ $filters.formatNumber(option.balance) }}
|
|
||||||
<span class="text-danger" v-if="option.balance < 0">بدهکار</span>
|
|
||||||
<span class="text-success" v-if="option.balance > 0">بستانکار</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</v-cob>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-floating mb-2">
|
|
||||||
<money3 v-bind="currencyConfig" min=0 class="form-control" v-model="this.sideOne.bs" />
|
|
||||||
<label class="form-label">مبلغ</label>
|
|
||||||
</div>
|
|
||||||
<div class="form-floating mb-2">
|
|
||||||
<money3 v-bind="currencyConfig" min=0 class="form-control" v-model="this.sideOne.tax" />
|
|
||||||
<label class="form-label">کارمزد خدمات بانکی</label>
|
|
||||||
</div>
|
|
||||||
<div class="form-floating mb-2">
|
|
||||||
<input v-model="this.sideOne.reference" class="form-control" type="text">
|
|
||||||
<label class="form-label">ارجاع</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-12 col-md-6">
|
|
||||||
<h3>به:</h3>
|
|
||||||
<div class="btn-group d-flex" role="group" aria-label="Basic radio toggle button group">
|
|
||||||
<input v-model="this.sideTwo.content" :checked="this.sideTwo.content == 'bank'"
|
|
||||||
@change="this.changeDes('bank')" type="radio" class="btn-check" name="btnradio1" id="btnradio4"
|
|
||||||
autocomplete="off" checked>
|
|
||||||
<label class="btn btn-outline-warning" for="btnradio4">بانک</label>
|
|
||||||
|
|
||||||
<input v-model="this.sideTwo.content" :checked="this.sideTwo.content == 'cashdesk'"
|
<v-row>
|
||||||
@change="this.changeDes('cashdesk')" type="radio" class="btn-check" name="btnradio1" id="btnradio5"
|
<v-col cols="12">
|
||||||
autocomplete="off">
|
<v-select :hide-details="false" v-if="sideOne.type === 'bank'" v-model="sideOne.id" :items="banks"
|
||||||
<label class="btn btn-outline-warning" for="btnradio5">صندوق</label>
|
item-title="name" item-value="id" label="بانک" variant="outlined" :item-props="bankItemProps"></v-select>
|
||||||
|
|
||||||
<input v-model="this.sideTwo.content" :checked="this.sideTwo.content == 'salary'"
|
<v-select :hide-details="false" v-if="sideOne.type === 'cashdesk'" v-model="sideOne.id"
|
||||||
@change="this.changeDes('salary')" type="radio" class="btn-check" name="btnradio1" id="btnradio6"
|
:items="cashdesks" item-title="name" item-value="id" label="صندوق" variant="outlined"
|
||||||
autocomplete="off">
|
:item-props="cashdeskItemProps"></v-select>
|
||||||
<label class="btn btn-outline-warning" for="btnradio6">تنخواه</label>
|
|
||||||
</div>
|
<v-select :hide-details="false" v-if="sideOne.type === 'salary'" v-model="sideOne.id"
|
||||||
<div class="row mt-2">
|
:items="salarys" item-title="name" item-value="id" label="تنخواه گردان" variant="outlined"
|
||||||
<div class="col-12">
|
:item-props="salaryItemProps"></v-select>
|
||||||
<div v-if="this.sideTwo.content == 'bank'" class="">
|
|
||||||
<label class="form-label">بانک</label>
|
<Hnumberinput :hide-details="false" v-model="sideOne.bs" label="مبلغ" variant="outlined" />
|
||||||
<div class="form-floating mb-2">
|
|
||||||
<v-cob dir="rtl" :options="banks" label="name" v-model="this.sideTwo.bank">
|
<Hnumberinput :hide-details="false" v-model="sideOne.tax" label="کارمزد خدمات بانکی" variant="outlined" />
|
||||||
<template #no-options="{ search, searching, loading }">
|
|
||||||
نتیجهای یافت نشد!
|
<v-text-field :hide-details="false" v-model="sideOne.reference" label="ارجاع"
|
||||||
</template>
|
variant="outlined"></v-text-field>
|
||||||
<template #option="option">
|
|
||||||
<div class="row">
|
<v-text-field v-model="sideOne.des" label="شرح" variant="outlined"></v-text-field>
|
||||||
<div class="col-12">
|
</v-col>
|
||||||
<i class="fa fa-bank"></i>
|
</v-row>
|
||||||
{{ option.name }}
|
</v-col>
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
<v-col cols="12" md="6">
|
||||||
موجودی:
|
<h3 class="text-primary text-h6 mb-4">به:</h3>
|
||||||
{{ $filters.formatNumber(option.balance) }}
|
<v-btn-group class="divided mb-4" :border="true">
|
||||||
<span class="text-danger" v-if="option.balance < 0">بدهکار</span>
|
<v-btn :color="sideTwo.type === 'bank' ? 'primary' : 'outlined'" @click="changeDes('bank')">بانک</v-btn>
|
||||||
<span class="text-success" v-if="option.balance > 0">بستانکار</span>
|
<v-btn :color="sideTwo.type === 'cashdesk' ? 'primary' : 'outlined'"
|
||||||
</div>
|
@click="changeDes('cashdesk')">صندوق</v-btn>
|
||||||
</div>
|
<v-btn :color="sideTwo.type === 'salary' ? 'primary' : 'outlined'"
|
||||||
</template>
|
@click="changeDes('salary')">تنخواه</v-btn>
|
||||||
</v-cob>
|
</v-btn-group>
|
||||||
</div>
|
|
||||||
</div>
|
<v-row>
|
||||||
<div v-if="this.sideTwo.content == 'cashdesk'" class="">
|
<v-col cols="12">
|
||||||
<label class="form-label">صندوق</label>
|
<v-select :hide-details="false" v-if="sideTwo.type === 'bank'" v-model="sideTwo.id" :items="banks"
|
||||||
<div class="form-floating mb-2">
|
item-title="name" item-value="id" label="بانک" variant="outlined" :item-props="bankItemProps"></v-select>
|
||||||
<v-cob dir="rtl" :options="cashdesks" label="name" v-model="this.sideTwo.cashdesk">
|
|
||||||
<template #no-options="{ search, searching, loading }">
|
<v-select :hide-details="false" v-if="sideTwo.type === 'cashdesk'" v-model="sideTwo.id"
|
||||||
نتیجهای یافت نشد!
|
:items="cashdesks" item-title="name" item-value="id" label="صندوق" variant="outlined"
|
||||||
</template>
|
:item-props="cashdeskItemProps"></v-select>
|
||||||
<template #option="option">
|
|
||||||
<div class="row">
|
<v-select :hide-details="false" v-if="sideTwo.type === 'salary'" v-model="sideTwo.id"
|
||||||
<div class="col-12">
|
:items="salarys" item-title="name" item-value="id" label="تنخواه گردان" variant="outlined"
|
||||||
<i class="fa fa-bank"></i>
|
:item-props="salaryItemProps"></v-select>
|
||||||
{{ option.name }}
|
|
||||||
</div>
|
<Hnumberinput :hide-details="false" v-model="sideTwo.bd" label="مبلغ" variant="outlined" readonly />
|
||||||
<div class="col-12">
|
|
||||||
موجودی:
|
<Hnumberinput :hide-details="false" v-model="sideTwo.tax" label="کارمزد خدمات بانکی" variant="outlined"
|
||||||
{{ $filters.formatNumber(option.balance) }}
|
readonly />
|
||||||
<span class="text-danger" v-if="option.balance < 0">بدهکار</span>
|
|
||||||
<span class="text-success" v-if="option.balance > 0">بستانکار</span>
|
<v-text-field :hide-details="false" v-model="sideTwo.reference" label="ارجاع"
|
||||||
</div>
|
variant="outlined"></v-text-field>
|
||||||
</div>
|
|
||||||
</template>
|
<v-text-field v-model="sideTwo.des" label="شرح" variant="outlined"></v-text-field>
|
||||||
</v-cob>
|
</v-col>
|
||||||
</div>
|
</v-row>
|
||||||
</div>
|
</v-col>
|
||||||
<div v-if="this.sideTwo.content == 'salary'" class="">
|
</v-row>
|
||||||
<label class="form-label">تنخواه گردان</label>
|
</v-container>
|
||||||
<div class="form-floating mb-2">
|
|
||||||
<v-cob dir="rtl" :options="salarys" label="name" v-model="this.sideTwo.salary">
|
|
||||||
<template #no-options="{ search, searching, loading }">
|
|
||||||
نتیجهای یافت نشد!
|
|
||||||
</template>
|
|
||||||
<template #option="option">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12">
|
|
||||||
<i class="fa fa-bank"></i>
|
|
||||||
{{ option.name }}
|
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
موجودی:
|
|
||||||
{{ $filters.formatNumber(option.balance) }}
|
|
||||||
<span class="text-danger" v-if="option.balance < 0">بدهکار</span>
|
|
||||||
<span class="text-success" v-if="option.balance > 0">بستانکار</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</v-cob>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-floating mb-2">
|
|
||||||
<money3 readonly="readonly" v-bind="currencyConfig" min=0 class="form-control"
|
|
||||||
v-model="this.sideTwo.bd" />
|
|
||||||
<label class="form-label">مبلغ</label>
|
|
||||||
</div>
|
|
||||||
<div class="form-floating mb-2">
|
|
||||||
<money3 readonly="readonly" v-bind="currencyConfig" min=0 class="form-control"
|
|
||||||
v-model="this.sideTwo.tax" />
|
|
||||||
<label class="form-label">کارمزد خدمات بانکی</label>
|
|
||||||
</div>
|
|
||||||
<div class="form-floating mb-2">
|
|
||||||
<input v-model="this.sideTwo.reference" class="form-control" type="text">
|
|
||||||
<label class="form-label">ارجاع</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import Loading from "vue-loading-overlay";
|
|
||||||
import Swal from "sweetalert2";
|
import Swal from "sweetalert2";
|
||||||
import archiveUpload from "../component/archive/archiveUpload.vue";
|
import archiveUpload from "../component/archive/archiveUpload.vue";
|
||||||
|
import Hdatepicker from "../../../components/forms/Hdatepicker.vue";
|
||||||
|
import Hnumberinput from "../../../components/forms/Hnumberinput.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "mod",
|
name: "mod",
|
||||||
components: {
|
components: {
|
||||||
Loading,
|
archiveUpload,
|
||||||
archiveUpload
|
Hdatepicker,
|
||||||
|
Hnumberinput
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
'sideOne.bs': function () {
|
'sideOne.bs': function () {
|
||||||
|
@ -274,78 +126,75 @@ export default {
|
||||||
this.sideTwo.tax = this.sideOne.tax;
|
this.sideTwo.tax = this.sideOne.tax;
|
||||||
},
|
},
|
||||||
'sideOne.bank': function () {
|
'sideOne.bank': function () {
|
||||||
this.sideOne.id = this.sideOne.bank.id;
|
this.sideOne.id = this.sideOne.bank?.id;
|
||||||
},
|
},
|
||||||
'sideOne.salary': function () {
|
'sideOne.salary': function () {
|
||||||
this.sideOne.id = this.sideOne.salary.id;
|
this.sideOne.id = this.sideOne.salary?.id;
|
||||||
},
|
},
|
||||||
'sideOne.cashdesk': function () {
|
'sideOne.cashdesk': function () {
|
||||||
this.sideOne.id = this.sideOne.cashdesk.id;
|
this.sideOne.id = this.sideOne.cashdesk?.id;
|
||||||
},
|
},
|
||||||
'sideTwo.bank': function () {
|
'sideTwo.bank': function () {
|
||||||
this.sideTwo.id = this.sideTwo.bank.id;
|
this.sideTwo.id = this.sideTwo.bank?.id;
|
||||||
},
|
},
|
||||||
'sideTwo.salary': function () {
|
'sideTwo.salary': function () {
|
||||||
this.sideTwo.id = this.sideTwo.salary.id;
|
this.sideTwo.id = this.sideTwo.salary?.id;
|
||||||
},
|
},
|
||||||
'sideTwo.cashdesk': function () {
|
'sideTwo.cashdesk': function () {
|
||||||
this.sideTwo.id = this.sideTwo.cashdesk.id;
|
this.sideTwo.id = this.sideTwo.cashdesk?.id;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
data: () => {
|
data: () => ({
|
||||||
return {
|
year: {},
|
||||||
isLoading: false,
|
date: '',
|
||||||
currencyConfig: {
|
des: '',
|
||||||
masked: false,
|
sideOne: {
|
||||||
prefix: '',
|
type: 'bank',
|
||||||
suffix: 'ریال',
|
bank: undefined,
|
||||||
thousands: ',',
|
cashdesk: undefined,
|
||||||
decimal: '.',
|
salary: undefined,
|
||||||
precision: 0,
|
bs: 0,
|
||||||
disableNegative: false,
|
bd: 0,
|
||||||
disabled: false,
|
tax: 0,
|
||||||
min: 0,
|
reference: '',
|
||||||
max: null,
|
id: '',
|
||||||
allowBlank: false,
|
des: 'انتقال بین حسابهای بانکی،صندوق،تنخواه گردان'
|
||||||
minimumNumberOfCharacters: 0,
|
},
|
||||||
shouldRound: true,
|
sideTwo: {
|
||||||
focusOnRight: false,
|
type: 'bank',
|
||||||
},
|
bank: undefined,
|
||||||
year: {},
|
cashdesk: undefined,
|
||||||
date: '',
|
salary: undefined,
|
||||||
des: '',
|
bs: 0,
|
||||||
sideOne: {
|
bd: 0,
|
||||||
content: 'bank',
|
tax: 0,
|
||||||
bank: undefined,
|
reference: '',
|
||||||
cashdesk: undefined,
|
id: '',
|
||||||
salary: undefined,
|
des: ''
|
||||||
bs: 0,
|
},
|
||||||
bd: 0,
|
banks: [],
|
||||||
tax: 0,
|
cashdesks: [],
|
||||||
reference: '',
|
salarys: []
|
||||||
table: 5,
|
}),
|
||||||
id: '',
|
|
||||||
des: 'انتقال بین حسابهای بانکی،صندوق،تنخواه گردان'
|
|
||||||
},
|
|
||||||
sideTwo: {
|
|
||||||
content: 'bank',
|
|
||||||
bank: undefined,
|
|
||||||
cashdesk: undefined,
|
|
||||||
salary: undefined,
|
|
||||||
bs: 0,
|
|
||||||
bd: 0,
|
|
||||||
tax: 0,
|
|
||||||
reference: '',
|
|
||||||
table: 5,
|
|
||||||
id: '',
|
|
||||||
des: 'انتقال بین حسابهای بانکی،صندوق،تنخواه گردان'
|
|
||||||
},
|
|
||||||
banks: [],
|
|
||||||
cashdesks: [],
|
|
||||||
salarys: []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
|
bankItemProps(item) {
|
||||||
|
return {
|
||||||
|
title: item.name,
|
||||||
|
subtitle: `موجودی: ${this.$filters.formatNumber(item.balance)} ${item.balance < 0 ? 'بدهکار' : 'بستانکار'}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cashdeskItemProps(item) {
|
||||||
|
return {
|
||||||
|
title: item.name,
|
||||||
|
subtitle: `موجودی: ${this.$filters.formatNumber(item.balance)} ${item.balance < 0 ? 'بدهکار' : 'بستانکار'}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
salaryItemProps(item) {
|
||||||
|
return {
|
||||||
|
title: item.name,
|
||||||
|
subtitle: `موجودی: ${this.$filters.formatNumber(item.balance)} ${item.balance < 0 ? 'بدهکار' : 'بستانکار'}`
|
||||||
|
}
|
||||||
|
},
|
||||||
loadData() {
|
loadData() {
|
||||||
axios.post('/api/bank/list').then((response) => {
|
axios.post('/api/bank/list').then((response) => {
|
||||||
this.banks = response.data;
|
this.banks = response.data;
|
||||||
|
@ -356,7 +205,6 @@ export default {
|
||||||
axios.post('/api/salary/list').then((response) => {
|
axios.post('/api/salary/list').then((response) => {
|
||||||
this.salarys = response.data;
|
this.salarys = response.data;
|
||||||
});
|
});
|
||||||
//load year
|
|
||||||
axios.post('/api/year/get').then((response) => {
|
axios.post('/api/year/get').then((response) => {
|
||||||
this.year = response.data;
|
this.year = response.data;
|
||||||
this.date = response.data.now;
|
this.date = response.data.now;
|
||||||
|
@ -365,10 +213,12 @@ export default {
|
||||||
axios.post('/api/accounting/doc/get', {
|
axios.post('/api/accounting/doc/get', {
|
||||||
code: this.$route.params.id
|
code: this.$route.params.id
|
||||||
}).then((response) => {
|
}).then((response) => {
|
||||||
|
this.des = response.data.doc.des;
|
||||||
|
this.date = response.data.doc.date;
|
||||||
|
|
||||||
let taxAmount = 0;
|
let taxAmount = 0;
|
||||||
response.data.rows.forEach((item, key) => {
|
response.data.rows.forEach((item, key) => {
|
||||||
if (item.refCode == '108') {
|
if (item.refCode == '108') {
|
||||||
//item is tax
|
|
||||||
taxAmount = item.bd;
|
taxAmount = item.bd;
|
||||||
response.data.rows[key].id = 'ignore';
|
response.data.rows[key].id = 'ignore';
|
||||||
}
|
}
|
||||||
|
@ -379,61 +229,65 @@ export default {
|
||||||
response.data.rows[key].id = 'ignore';
|
response.data.rows[key].id = 'ignore';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
response.data.rows.forEach((item, key) => {
|
|
||||||
|
|
||||||
if (item.bs != 0 && item.tableCode == 5 && item.id != 'ignore') {
|
response.data.rows.forEach((item) => {
|
||||||
|
if (item.bs != 0 && item.id != 'ignore') {
|
||||||
let opt = {
|
let opt = {
|
||||||
content: '',
|
type: '',
|
||||||
bank: undefined,
|
bank: undefined,
|
||||||
cashdesk: undefined,
|
cashdesk: undefined,
|
||||||
salary: undefined,
|
salary: undefined,
|
||||||
bs: item.bs,
|
bs: item.bs,
|
||||||
bd: item.bd,
|
bd: item.bd,
|
||||||
tax: taxAmount,
|
tax: taxAmount,
|
||||||
reference: '',
|
reference: item.referral,
|
||||||
table: 5,
|
|
||||||
id: '',
|
id: '',
|
||||||
des: item.des
|
des: item.des
|
||||||
};
|
};
|
||||||
if (item.bank != undefined) {
|
if (item.bank) {
|
||||||
opt.bank = item.bank;
|
opt.bank = item.bank;
|
||||||
opt.content = 'bank';
|
opt.type = 'bank';
|
||||||
|
opt.id = item.bank.id;
|
||||||
}
|
}
|
||||||
else if (item.cashdesk != undefined) {
|
else if (item.cashdesk) {
|
||||||
opt.cashdesk = item.cashdesk;
|
opt.cashdesk = item.cashdesk;
|
||||||
opt.content = 'cashdesk';
|
opt.type = 'cashdesk';
|
||||||
|
opt.id = item.cashdesk.id;
|
||||||
}
|
}
|
||||||
else if (item.salary != undefined) {
|
else if (item.salary) {
|
||||||
opt.salary = item.salary;
|
opt.salary = item.salary;
|
||||||
opt.content = 'salary';
|
opt.type = 'salary';
|
||||||
|
opt.id = item.salary.id;
|
||||||
}
|
}
|
||||||
this.sideOne = opt
|
this.sideOne = opt;
|
||||||
}
|
}
|
||||||
if (parseInt(item.bd) != 0 && parseInt(item.tableCode) == 5 && item.id != 'ignore') {
|
else if (parseInt(item.bd) != 0 && item.id != 'ignore') {
|
||||||
let opt = {
|
let opt = {
|
||||||
content: '',
|
type: '',
|
||||||
bank: undefined,
|
bank: undefined,
|
||||||
cashdesk: undefined,
|
cashdesk: undefined,
|
||||||
salary: undefined,
|
salary: undefined,
|
||||||
bs: item.bs,
|
bs: item.bs,
|
||||||
bd: item.bd,
|
bd: item.bd,
|
||||||
tax: taxAmount,
|
tax: taxAmount,
|
||||||
reference: '',
|
reference: item.referral,
|
||||||
table: 5,
|
|
||||||
id: '',
|
id: '',
|
||||||
des: item.des
|
des: item.des
|
||||||
};
|
};
|
||||||
if (item.bank != undefined) {
|
if (item.bank) {
|
||||||
opt.bank = item.bank;
|
opt.bank = item.bank;
|
||||||
opt.content = 'bank';
|
opt.type = 'bank';
|
||||||
|
opt.id = item.bank.id;
|
||||||
}
|
}
|
||||||
else if (item.cashdesk != undefined) {
|
else if (item.cashdesk) {
|
||||||
opt.cashdesk = item.cashdesk;
|
opt.cashdesk = item.cashdesk;
|
||||||
opt.content = 'cashdesk';
|
opt.type = 'cashdesk';
|
||||||
|
opt.id = item.cashdesk.id;
|
||||||
}
|
}
|
||||||
else if (item.salary != undefined) {
|
else if (item.salary) {
|
||||||
opt.salary = item.salary;
|
opt.salary = item.salary;
|
||||||
opt.content = 'salary';
|
opt.type = 'salary';
|
||||||
|
opt.id = item.salary.id;
|
||||||
}
|
}
|
||||||
this.sideTwo = opt;
|
this.sideTwo = opt;
|
||||||
}
|
}
|
||||||
|
@ -448,114 +302,99 @@ export default {
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
confirmButtonText: 'قبول'
|
confirmButtonText: 'قبول'
|
||||||
});
|
});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (
|
|
||||||
(this.sideOne.content == 'bank' && this.sideOne.bank == undefined) ||
|
if (
|
||||||
(this.sideOne.content == 'salary' && this.sideOne.salary == undefined) ||
|
(this.sideOne.type == 'bank' && !this.sideOne.id) ||
|
||||||
(this.sideOne.content == 'cashdesk' && this.sideOne.cashdesk == undefined)
|
(this.sideOne.type == 'salary' && !this.sideOne.id) ||
|
||||||
|
(this.sideOne.type == 'cashdesk' && !this.sideOne.id)
|
||||||
) {
|
) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
text: 'انتقال دهنده انتخاب نشده است.',
|
text: 'انتقال دهنده انتخاب نشده است.',
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
confirmButtonText: 'قبول'
|
confirmButtonText: 'قبول'
|
||||||
});
|
});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (
|
|
||||||
(this.sideTwo.content == 'bank' && this.sideTwo.bank == undefined) ||
|
if (
|
||||||
(this.sideTwo.content == 'salary' && this.sideTwo.salary == undefined) ||
|
(this.sideTwo.type == 'bank' && !this.sideTwo.id) ||
|
||||||
(this.sideTwo.content == 'cashdesk' && this.sideTwo.cashdesk == undefined)
|
(this.sideTwo.type == 'salary' && !this.sideTwo.id) ||
|
||||||
|
(this.sideTwo.type == 'cashdesk' && !this.sideTwo.id)
|
||||||
) {
|
) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
text: 'انتقال گیرنده انتخاب نشده است.',
|
text: 'انتقال گیرنده انتخاب نشده است.',
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
confirmButtonText: 'قبول'
|
confirmButtonText: 'قبول'
|
||||||
});
|
});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
let PushData = {
|
let PushData = {
|
||||||
date: this.date,
|
date: this.date,
|
||||||
des: this.des,
|
des: this.des,
|
||||||
type: 'transfer',
|
update: this.$route.params.id,
|
||||||
update: this.$route.params.id,
|
rows: [
|
||||||
rows: [
|
{
|
||||||
{
|
bs: this.sideOne.bs,
|
||||||
bs: this.sideOne.bs,
|
|
||||||
bd: 0,
|
|
||||||
type: this.sideOne.content,
|
|
||||||
bank: this.sideOne.bank,
|
|
||||||
salary: this.sideOne.salary,
|
|
||||||
cashdesk: this.sideOne.cashdesk,
|
|
||||||
table: this.sideOne.table,
|
|
||||||
id: this.sideOne.id,
|
|
||||||
des: this.sideOne.des,
|
|
||||||
referral: this.sideOne.reference
|
|
||||||
},
|
|
||||||
{
|
|
||||||
bd: this.sideTwo.bd,
|
|
||||||
bs: 0,
|
|
||||||
type: this.sideTwo.content,
|
|
||||||
bank: this.sideTwo.bank,
|
|
||||||
salary: this.sideTwo.salary,
|
|
||||||
cashdesk: this.sideTwo.cashdesk,
|
|
||||||
table: this.sideTwo.table,
|
|
||||||
id: this.sideTwo.id,
|
|
||||||
des: this.sideTwo.des,
|
|
||||||
referral: this.sideTwo.reference
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
if (this.sideOne.tax != 0) {
|
|
||||||
PushData.rows.push({
|
|
||||||
bd: this.sideOne.tax,
|
|
||||||
bs: 0,
|
|
||||||
type: 'calc',
|
|
||||||
table: 108,
|
|
||||||
des: 'کارمزد هزینههای بانکی'
|
|
||||||
});
|
|
||||||
PushData.rows.push({
|
|
||||||
bs: this.sideOne.tax,
|
|
||||||
bd: 0,
|
bd: 0,
|
||||||
type: this.sideOne.content,
|
type: this.sideOne.type,
|
||||||
bank: this.sideOne.bank,
|
|
||||||
salary: this.sideOne.salary,
|
|
||||||
cashdesk: this.sideOne.cashdesk,
|
|
||||||
table: this.sideOne.table,
|
|
||||||
id: this.sideOne.id,
|
id: this.sideOne.id,
|
||||||
des: 'کارمزد هزینههای بانکی'
|
referral: this.sideOne.reference,
|
||||||
})
|
des: this.sideOne.des,
|
||||||
}
|
},
|
||||||
axios.post('/api/accounting/insert', PushData).then((response) => {
|
{
|
||||||
if (response.data.result == '1') {
|
bd: this.sideTwo.bd,
|
||||||
Swal.fire({
|
bs: 0,
|
||||||
text: 'سند انتقال با موفقیت ثبت شد.',
|
type: this.sideTwo.type,
|
||||||
icon: 'success',
|
id: this.sideTwo.id,
|
||||||
confirmButtonText: 'قبول'
|
referral: this.sideTwo.reference,
|
||||||
}).then((res) => {
|
des: this.sideTwo.des,
|
||||||
this.$router.push('/acc/transfer/list');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else if (response.data.result == '4') {
|
|
||||||
Swal.fire({
|
|
||||||
text: response.data.msg,
|
|
||||||
icon: 'error',
|
|
||||||
confirmButtonText: 'قبول'
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
if (this.sideOne.tax != 0) {
|
||||||
|
PushData.rows.push({
|
||||||
|
bd: this.sideOne.tax,
|
||||||
|
bs: 0,
|
||||||
|
type: 'calc',
|
||||||
|
des: 'کارمزد هزینههای بانکی'
|
||||||
|
});
|
||||||
|
PushData.rows.push({
|
||||||
|
bs: this.sideOne.tax,
|
||||||
|
bd: 0,
|
||||||
|
type: this.sideOne.type,
|
||||||
|
id: this.sideOne.id,
|
||||||
|
des: 'کارمزد هزینههای بانکی'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
axios.post('/api/transfer/insert', PushData).then((response) => {
|
||||||
|
if (response.data.result == '1') {
|
||||||
|
Swal.fire({
|
||||||
|
text: 'سند انتقال با موفقیت ثبت شد.',
|
||||||
|
icon: 'success',
|
||||||
|
confirmButtonText: 'قبول'
|
||||||
|
}).then(() => {
|
||||||
|
this.$router.push('/acc/transfer/list');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (response.data.result == '4') {
|
||||||
|
Swal.fire({
|
||||||
|
text: response.data.msg,
|
||||||
|
icon: 'error',
|
||||||
|
confirmButtonText: 'قبول'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
changeDes(content) {
|
changeDes(type) {
|
||||||
this.sideTwo.content = content;
|
this.sideTwo.type = type;
|
||||||
if (content == ' bank') { this.sideTwo.table = 5; }
|
|
||||||
else if (content == ' salary') { this.sideTwo.table = 122; }
|
|
||||||
else if (content == ' cashdesk') { this.sideTwo.table = 121; }
|
|
||||||
},
|
},
|
||||||
changeFrom(content) {
|
changeFrom(type) {
|
||||||
this.sideOne.content = content;
|
this.sideOne.type = type;
|
||||||
if (content == ' bank') { this.sideOne.table = 5; }
|
|
||||||
else if (content == ' salary') { this.sideOne.table = 122; }
|
|
||||||
else if (content == ' cashdesk') { this.sideOne.table = 121; }
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -564,4 +403,8 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped>
|
||||||
|
.v-navigation-bar {
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in a new issue