Merge branch 'fix-download-expense-issue' into 'master'

fixed uploaded attachment not removed

See merge request mohit.panjvani/crater-web!1441
This commit is contained in:
Mohit Panjwani
2022-02-15 06:10:04 +00:00
9 changed files with 59 additions and 20 deletions

View File

@ -71,6 +71,9 @@ class CompanyController extends Controller
$data = json_decode($request->company_logo); $data = json_decode($request->company_logo);
if (isset($request->is_company_logo_removed) && (bool) $request->is_company_logo_removed) {
$company->clearMediaCollection('logo');
}
if ($data) { if ($data) {
$company = Company::find($request->header('company')); $company = Company::find($request->header('company'));
@ -98,6 +101,9 @@ class CompanyController extends Controller
{ {
$user = auth()->user(); $user = auth()->user();
if (isset($request->is_admin_avatar_removed) && (bool) $request->is_admin_avatar_removed) {
$user->clearMediaCollection('admin_avatar');
}
if ($user && $request->hasFile('admin_avatar')) { if ($user && $request->hasFile('admin_avatar')) {
$user->clearMediaCollection('admin_avatar'); $user->clearMediaCollection('admin_avatar');

View File

@ -17,6 +17,9 @@ class ProfileController extends Controller
$customer->update($request->validated()); $customer->update($request->validated());
if (isset($request->is_customer_avatar_removed) && (bool) $request->is_customer_avatar_removed) {
$customer->clearMediaCollection('customer_avatar');
}
if ($customer && $request->hasFile('customer_avatar')) { if ($customer && $request->hasFile('customer_avatar')) {
$customer->clearMediaCollection('customer_avatar'); $customer->clearMediaCollection('customer_avatar');

View File

@ -126,14 +126,14 @@ class Expense extends Model implements HasMedia
{ {
foreach (explode(' ', $search) as $term) { foreach (explode(' ', $search) as $term) {
$query->whereHas('category', function ($query) use ($term) { $query->whereHas('category', function ($query) use ($term) {
$query->where('name', 'LIKE', '%'.$term.'%'); $query->where('name', 'LIKE', '%' . $term . '%');
}); });
} }
} }
public function scopeWhereNotes($query, $search) public function scopeWhereNotes($query, $search)
{ {
$query->where('notes', 'LIKE', '%'.$search.'%'); $query->where('notes', 'LIKE', '%' . $search . '%');
} }
public function scopeWhereCategory($query, $categoryId) public function scopeWhereCategory($query, $categoryId)
@ -188,9 +188,9 @@ class Expense extends Model implements HasMedia
{ {
foreach (explode(' ', $search) as $term) { foreach (explode(' ', $search) as $term) {
$query->whereHas('category', function ($query) use ($term) { $query->whereHas('category', function ($query) use ($term) {
$query->where('name', 'LIKE', '%'.$term.'%'); $query->where('name', 'LIKE', '%' . $term . '%');
}) })
->orWhere('notes', 'LIKE', '%'.$term.'%'); ->orWhere('notes', 'LIKE', '%' . $term . '%');
} }
} }
@ -262,6 +262,9 @@ class Expense extends Model implements HasMedia
ExchangeRateLog::addExchangeRateLog($this); ExchangeRateLog::addExchangeRateLog($this);
} }
if (isset($request->is_attachment_receipt_removed) && (bool) $request->is_attachment_receipt_removed) {
$this->clearMediaCollection('receipts');
}
if ($request->hasFile('attachment_receipt')) { if ($request->hasFile('attachment_receipt')) {
$this->clearMediaCollection('receipts'); $this->clearMediaCollection('receipts');
$this->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts'); $this->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts');

View File

@ -61,15 +61,15 @@ export const useExpenseStore = (useWindow = false) => {
Object.assign(this.currentExpense, response.data.data) Object.assign(this.currentExpense, response.data.data)
this.currentExpense.selectedCurrency = this.currentExpense.selectedCurrency =
response.data.data.currency response.data.data.currency
this.currentExpense.attachment_receipt = null
if (response.data.data.attachment_receipt) { if (response.data.data.attachment_receipt_url) {
if ( if (
utils.isImageFile( utils.isImageFile(
response.data.data.attachment_receipt_meta.mime_type response.data.data.attachment_receipt_meta.mime_type
) )
) { ) {
this.currentExpense.receiptFiles = [ this.currentExpense.receiptFiles = [
{ image: `/expenses/${id}/receipt` }, { image: `/reports/expenses/${id}/receipt?${response.data.data.attachment_receipt_meta.uuid}` },
] ]
} else { } else {
this.currentExpense.receiptFiles = [ this.currentExpense.receiptFiles = [
@ -118,12 +118,13 @@ export const useExpenseStore = (useWindow = false) => {
}) })
}, },
updateExpense({ id, data }) { updateExpense({ id, data, isAttachmentReceiptRemoved }) {
const notificationStore = useNotificationStore() const notificationStore = useNotificationStore()
const formData = utils.toFormData(data) const formData = utils.toFormData(data)
formData.append('_method', 'PUT') formData.append('_method', 'PUT')
formData.append('is_attachment_receipt_removed', isAttachmentReceiptRemoved)
return new Promise((resolve) => { return new Promise((resolve) => {
axios.post(`/api/v1/expenses/${id}`, formData).then((response) => { axios.post(`/api/v1/expenses/${id}`, formData).then((response) => {

View File

@ -21,7 +21,7 @@
<template #actions> <template #actions>
<BaseButton <BaseButton
v-if="isEdit && expenseStore.currentExpense.attachment_receipt" v-if="isEdit && expenseStore.currentExpense.attachment_receipt_url"
:href="receiptDownloadUrl" :href="receiptDownloadUrl"
tag="a" tag="a"
variant="primary-outline" variant="primary-outline"
@ -317,6 +317,7 @@ const globalStore = useGlobalStore()
let isSaving = ref(false) let isSaving = ref(false)
let isFetchingInitialData = ref(false) let isFetchingInitialData = ref(false)
const expenseValidationScope = 'newExpense' const expenseValidationScope = 'newExpense'
const isAttachmentReceiptRemoved = ref(false)
const rules = computed(() => { const rules = computed(() => {
return { return {
@ -381,7 +382,7 @@ const pageTitle = computed(() =>
) )
const receiptDownloadUrl = computed(() => const receiptDownloadUrl = computed(() =>
isEdit.value ? `/expenses/${route.params.id}/download-receipt` : '' isEdit.value ? `/reports/expenses/${route.params.id}/download-receipt` : ''
) )
expenseStore.resetCurrentExpenseData() expenseStore.resetCurrentExpenseData()
@ -395,6 +396,7 @@ function onFileInputChange(fileName, file) {
function onFileInputRemove() { function onFileInputRemove() {
expenseStore.currentExpense.attachment_receipt = null expenseStore.currentExpense.attachment_receipt = null
isAttachmentReceiptRemoved.value = true
} }
function openCategoryModal() { function openCategoryModal() {
@ -460,11 +462,14 @@ async function submitForm() {
await expenseStore.updateExpense({ await expenseStore.updateExpense({
id: route.params.id, id: route.params.id,
data: formData, data: formData,
isAttachmentReceiptRemoved: isAttachmentReceiptRemoved.value
}) })
} else { } else {
await expenseStore.addExpense(formData) await expenseStore.addExpense(formData)
} }
isSaving.value = false isSaving.value = false
expenseStore.currentExpense.attachment_receipt = null
isAttachmentReceiptRemoved.value = false
router.push('/admin/expenses') router.push('/admin/expenses')
} catch (err) { } catch (err) {
console.error(err) console.error(err)

View File

@ -118,6 +118,7 @@ const { t } = useI18n()
let isSaving = ref(false) let isSaving = ref(false)
let avatarFileBlob = ref(null) let avatarFileBlob = ref(null)
let imgFiles = ref([]) let imgFiles = ref([])
const isAdminAvatarRemoved = ref(false)
if (userStore.currentUser.avatar) { if (userStore.currentUser.avatar) {
imgFiles.value.push({ imgFiles.value.push({
@ -170,6 +171,7 @@ function onFileInputChange(fileName, file) {
function onFileInputRemove() { function onFileInputRemove() {
avatarFileBlob.value = null avatarFileBlob.value = null
isAdminAvatarRemoved.value = true
} }
async function updateUserData() { async function updateUserData() {
@ -209,12 +211,17 @@ async function updateUserData() {
if (response.data.data) { if (response.data.data) {
isSaving.value = false isSaving.value = false
if (avatarFileBlob.value) { if (avatarFileBlob.value || isAdminAvatarRemoved.value) {
let avatarData = new FormData() let avatarData = new FormData()
avatarData.append('admin_avatar', avatarFileBlob.value) if (avatarFileBlob.value) {
avatarData.append('admin_avatar', avatarFileBlob.value)
}
avatarData.append('is_admin_avatar_removed', isAdminAvatarRemoved.value)
await userStore.uploadAvatar(avatarData) await userStore.uploadAvatar(avatarData)
avatarFileBlob.value = null
isAdminAvatarRemoved.value = false
} }
userForm.password = '' userForm.password = ''

View File

@ -180,6 +180,7 @@ utils.mergeSettings(companyForm, {
let previewLogo = ref([]) let previewLogo = ref([])
let logoFileBlob = ref(null) let logoFileBlob = ref(null)
let logoFileName = ref(null) let logoFileName = ref(null)
const isCompanyLogoRemoved = ref(false)
if (companyForm.logo) { if (companyForm.logo) {
previewLogo.value.push({ previewLogo.value.push({
@ -218,6 +219,7 @@ function onFileInputChange(fileName, file, fileCount, fileList) {
function onFileInputRemove() { function onFileInputRemove() {
logoFileBlob.value = null logoFileBlob.value = null
isCompanyLogoRemoved.value = true
} }
async function updateCompanyData() { async function updateCompanyData() {
@ -232,18 +234,23 @@ async function updateCompanyData() {
const res = await companyStore.updateCompany(companyForm) const res = await companyStore.updateCompany(companyForm)
if (res.data.data) { if (res.data.data) {
if (logoFileBlob.value) { if (logoFileBlob.value || isCompanyLogoRemoved.value) {
let logoData = new FormData() let logoData = new FormData()
logoData.append( if (logoFileBlob.value) {
'company_logo', logoData.append(
JSON.stringify({ 'company_logo',
name: logoFileName.value, JSON.stringify({
data: logoFileBlob.value, name: logoFileName.value,
}) data: logoFileBlob.value,
) })
)
}
logoData.append('is_company_logo_removed', isCompanyLogoRemoved.value)
await companyStore.updateCompanyLogo(logoData) await companyStore.updateCompanyLogo(logoData)
logoFileBlob.value = null
isCompanyLogoRemoved.value = false
} }
isSaving.value = false isSaving.value = false

View File

@ -33,6 +33,7 @@
:name="inputFieldName" :name="inputFieldName"
:accept="accept" :accept="accept"
class="absolute z-10 w-full h-full opacity-0 cursor-pointer" class="absolute z-10 w-full h-full opacity-0 cursor-pointer"
@click="$event.target.value=null"
@change=" @change="
onChange( onChange(
$event.target.name, $event.target.name,
@ -557,6 +558,7 @@ function onAvatarRemove(image) {
function onFileRemove(index) { function onFileRemove(index) {
localFiles.value.splice(index, 1) localFiles.value.splice(index, 1)
emit('remove', index)
} }
function getDefaultAvatar() { function getDefaultAvatar() {

View File

@ -153,6 +153,7 @@ let isSaving = ref(false)
let avatarFileBlob = ref(null) let avatarFileBlob = ref(null)
let isShowPassword = ref(false) let isShowPassword = ref(false)
let isShowConfirmPassword = ref(false) let isShowConfirmPassword = ref(false)
const isCustomerAvatarRemoved = ref(false)
if (userStore.userForm.avatar) { if (userStore.userForm.avatar) {
imgFiles.value.push({ imgFiles.value.push({
@ -206,6 +207,7 @@ function onFileInputChange(fileName, file) {
function onFileInputRemove() { function onFileInputRemove() {
avatarFileBlob.value = null avatarFileBlob.value = null
isCustomerAvatarRemoved.value = true
} }
function updateCustomerData() { function updateCustomerData() {
@ -230,6 +232,7 @@ function updateCustomerData() {
if (avatarFileBlob.value) { if (avatarFileBlob.value) {
data.append('customer_avatar', avatarFileBlob.value) data.append('customer_avatar', avatarFileBlob.value)
} }
data.append('is_customer_avatar_removed', isCustomerAvatarRemoved.value)
userStore userStore
.updateCurrentUser({ .updateCurrentUser({
@ -243,6 +246,8 @@ function updateCustomerData() {
state.userForm.password = '' state.userForm.password = ''
state.userForm.confirm_password = '' state.userForm.confirm_password = ''
}) })
avatarFileBlob.value = null
isCustomerAvatarRemoved.value = false
} }
}) })
.catch((error) => { .catch((error) => {