mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-28 12:11:08 -04:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			dark-actio
			...
			dark-view-
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5ce6844028 | |||
| c541114992 | |||
| db89a93faa | 
| @ -43,6 +43,12 @@ | |||||||
|             max-w-full |             max-w-full | ||||||
|             left-0 |             left-0 | ||||||
|             top-3 |             top-3 | ||||||
|  |             bg-white | ||||||
|  |             dark:border | ||||||
|  |             dark:border-white/10 | ||||||
|  |             dark:text-white | ||||||
|  |             dark:bg-gray-800 | ||||||
|  |             dark:shadow-glass | ||||||
|           " |           " | ||||||
|         > |         > | ||||||
|           <div |           <div | ||||||
| @ -53,7 +59,7 @@ | |||||||
|               ring-1 ring-black ring-opacity-5 |               ring-1 ring-black ring-opacity-5 | ||||||
|             " |             " | ||||||
|           > |           > | ||||||
|             <div class="relative grid bg-white"> |             <div class="relative grid bg-white dark:bg-gray-800"> | ||||||
|               <div class="relative p-4"> |               <div class="relative p-4"> | ||||||
|                 <BaseInput |                 <BaseInput | ||||||
|                   v-model="textSearch" |                   v-model="textSearch" | ||||||
| @ -66,7 +72,7 @@ | |||||||
|  |  | ||||||
|               <div |               <div | ||||||
|                 v-if="filteredNotes.length > 0" |                 v-if="filteredNotes.length > 0" | ||||||
|                 class="relative flex flex-col overflow-auto list max-h-36" |                 class="relative flex flex-col overflow-auto list max-h-36 dark:border-white/10" | ||||||
|               > |               > | ||||||
|                 <div |                 <div | ||||||
|                   v-for="(note, index) in filteredNotes" |                   v-for="(note, index) in filteredNotes" | ||||||
| @ -79,6 +85,8 @@ | |||||||
|                     cursor-pointer |                     cursor-pointer | ||||||
|                     hover:bg-gray-100 hover:cursor-pointer |                     hover:bg-gray-100 hover:cursor-pointer | ||||||
|                     last:border-b-0 |                     last:border-b-0 | ||||||
|  |                     dark:border-gray-600 | ||||||
|  |                     dark:border-white/10 dark:hover:bg-gray-700/30 | ||||||
|                   " |                   " | ||||||
|                   @click="selectNote(index, close)" |                   @click="selectNote(index, close)" | ||||||
|                 > |                 > | ||||||
| @ -119,6 +127,10 @@ | |||||||
|                 bg-gray-200 |                 bg-gray-200 | ||||||
|                 border-none |                 border-none | ||||||
|                 outline-none |                 outline-none | ||||||
|  |                 dark:bg-gray-600/70 | ||||||
|  |                 dark:backdrop-blur-xl | ||||||
|  |                 dark:shadow-glass | ||||||
|  |                 dark:hover:bg-gray-600/80 | ||||||
|               " |               " | ||||||
|               @click="openNoteModal" |               @click="openNoteModal" | ||||||
|             > |             > | ||||||
|  | |||||||
| @ -1,5 +1,13 @@ | |||||||
| <template> | <template> | ||||||
|   <tr class="box-border bg-white border border-gray-200 border-solid rounded-b"> |   <tr | ||||||
|  |     class=" | ||||||
|  |       box-border | ||||||
|  |       bg-white | ||||||
|  |       border border-gray-200 border-solid | ||||||
|  |       rounded-b | ||||||
|  |       dark:shadow-glass dark:border dark:border-white/10 dark:bg-gray-800/70 | ||||||
|  |       " | ||||||
|  |     > | ||||||
|     <td colspan="5" class="p-0 text-left align-top"> |     <td colspan="5" class="p-0 text-left align-top"> | ||||||
|       <table class="w-full"> |       <table class="w-full"> | ||||||
|         <colgroup> |         <colgroup> | ||||||
| @ -130,7 +138,7 @@ | |||||||
|                 <div class="flex items-center justify-center w-6 h-10 mx-2"> |                 <div class="flex items-center justify-center w-6 h-10 mx-2"> | ||||||
|                   <BaseIcon |                   <BaseIcon | ||||||
|                     v-if="showRemoveButton" |                     v-if="showRemoveButton" | ||||||
|                     class="h-5 text-gray-700 cursor-pointer" |                     class="h-5 dark:text-red-400 cursor-pointer" | ||||||
|                     name="TrashIcon" |                     name="TrashIcon" | ||||||
|                     @click="store.removeItem(index)" |                     @click="store.removeItem(index)" | ||||||
|                   /> |                   /> | ||||||
|  | |||||||
| @ -1,155 +1,113 @@ | |||||||
| <template> | <template> | ||||||
|   <table class="text-center item-table min-w-full"> |   <div class="relative" > | ||||||
|     <colgroup> |     <BaseDarkHighlight class="z-[-1]" /> | ||||||
|       <col style="width: 40%; min-width: 280px" /> |     <table class="text-center item-table min-w-full"> | ||||||
|       <col style="width: 10%; min-width: 120px" /> |       <colgroup> | ||||||
|       <col style="width: 15%; min-width: 120px" /> |         <col style="width: 40%; min-width: 280px" /> | ||||||
|       <col |         <col style="width: 10%; min-width: 120px" /> | ||||||
|         v-if="store[storeProp].discount_per_item === 'YES'" |         <col style="width: 15%; min-width: 120px" /> | ||||||
|         style="width: 15%; min-width: 160px" |         <col | ||||||
|       /> |  | ||||||
|       <col style="width: 15%; min-width: 120px" /> |  | ||||||
|     </colgroup> |  | ||||||
|     <thead class="bg-white border border-gray-200 border-solid"> |  | ||||||
|       <tr> |  | ||||||
|         <th |  | ||||||
|           class=" |  | ||||||
|             px-5 |  | ||||||
|             py-3 |  | ||||||
|             text-sm |  | ||||||
|             not-italic |  | ||||||
|             font-medium |  | ||||||
|             leading-5 |  | ||||||
|             text-left text-gray-700 |  | ||||||
|             border-t border-b border-gray-200 border-solid |  | ||||||
|           " |  | ||||||
|         > |  | ||||||
|           <BaseContentPlaceholders v-if="isLoading"> |  | ||||||
|             <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> |  | ||||||
|           </BaseContentPlaceholders> |  | ||||||
|           <span v-else class="pl-7"> |  | ||||||
|             {{ $tc('items.item', 2) }} |  | ||||||
|           </span> |  | ||||||
|         </th> |  | ||||||
|         <th |  | ||||||
|           class=" |  | ||||||
|             px-5 |  | ||||||
|             py-3 |  | ||||||
|             text-sm |  | ||||||
|             not-italic |  | ||||||
|             font-medium |  | ||||||
|             leading-5 |  | ||||||
|             text-right text-gray-700 |  | ||||||
|             border-t border-b border-gray-200 border-solid |  | ||||||
|           " |  | ||||||
|         > |  | ||||||
|           <BaseContentPlaceholders v-if="isLoading"> |  | ||||||
|             <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> |  | ||||||
|           </BaseContentPlaceholders> |  | ||||||
|           <span v-else> |  | ||||||
|             {{ $t('invoices.item.quantity') }} |  | ||||||
|           </span> |  | ||||||
|         </th> |  | ||||||
|         <th |  | ||||||
|           class=" |  | ||||||
|             px-5 |  | ||||||
|             py-3 |  | ||||||
|             text-sm |  | ||||||
|             not-italic |  | ||||||
|             font-medium |  | ||||||
|             leading-5 |  | ||||||
|             text-left text-gray-700 |  | ||||||
|             border-t border-b border-gray-200 border-solid |  | ||||||
|           " |  | ||||||
|         > |  | ||||||
|           <BaseContentPlaceholders v-if="isLoading"> |  | ||||||
|             <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> |  | ||||||
|           </BaseContentPlaceholders> |  | ||||||
|           <span v-else> |  | ||||||
|             {{ $t('invoices.item.price') }} |  | ||||||
|           </span> |  | ||||||
|         </th> |  | ||||||
|         <th |  | ||||||
|           v-if="store[storeProp].discount_per_item === 'YES'" |           v-if="store[storeProp].discount_per_item === 'YES'" | ||||||
|           class=" |           style="width: 15%; min-width: 160px" | ||||||
|             px-5 |  | ||||||
|             py-3 |  | ||||||
|             text-sm |  | ||||||
|             not-italic |  | ||||||
|             font-medium |  | ||||||
|             leading-5 |  | ||||||
|             text-left text-gray-700 |  | ||||||
|             border-t border-b border-gray-200 border-solid |  | ||||||
|           " |  | ||||||
|         > |  | ||||||
|           <BaseContentPlaceholders v-if="isLoading"> |  | ||||||
|             <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> |  | ||||||
|           </BaseContentPlaceholders> |  | ||||||
|           <span v-else> |  | ||||||
|             {{ $t('invoices.item.discount') }} |  | ||||||
|           </span> |  | ||||||
|         </th> |  | ||||||
|         <th |  | ||||||
|           class=" |  | ||||||
|             px-5 |  | ||||||
|             py-3 |  | ||||||
|             text-sm |  | ||||||
|             not-italic |  | ||||||
|             font-medium |  | ||||||
|             leading-5 |  | ||||||
|             text-right text-gray-700 |  | ||||||
|             border-t border-b border-gray-200 border-solid |  | ||||||
|           " |  | ||||||
|         > |  | ||||||
|           <BaseContentPlaceholders v-if="isLoading"> |  | ||||||
|             <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> |  | ||||||
|           </BaseContentPlaceholders> |  | ||||||
|           <span v-else class="pr-10 column-heading"> |  | ||||||
|             {{ $t('invoices.item.amount') }} |  | ||||||
|           </span> |  | ||||||
|         </th> |  | ||||||
|       </tr> |  | ||||||
|     </thead> |  | ||||||
|     <draggable |  | ||||||
|       v-model="store[storeProp].items" |  | ||||||
|       item-key="id" |  | ||||||
|       tag="tbody" |  | ||||||
|       handle=".handle" |  | ||||||
|     > |  | ||||||
|       <template #item="{ element, index }"> |  | ||||||
|         <Item |  | ||||||
|           :key="element.id" |  | ||||||
|           :index="index" |  | ||||||
|           :item-data="element" |  | ||||||
|           :loading="isLoading" |  | ||||||
|           :currency="defaultCurrency" |  | ||||||
|           :item-validation-scope="itemValidationScope" |  | ||||||
|           :invoice-items="store[storeProp].items" |  | ||||||
|           :store="store" |  | ||||||
|           :store-prop="storeProp" |  | ||||||
|         /> |         /> | ||||||
|       </template> |         <col style="width: 15%; min-width: 120px" /> | ||||||
|     </draggable> |       </colgroup> | ||||||
|   </table> |       <thead | ||||||
|  |         class=" | ||||||
|  |           bg-white | ||||||
|  |           border border-gray-200 border-solid | ||||||
|  |           dark:shadow-glass dark:border dark:border-white/10 dark:bg-gray-800/70 | ||||||
|  |           " | ||||||
|  |         > | ||||||
|  |         <tr> | ||||||
|  |           <th class="text-left" :class="theadClass"> | ||||||
|  |             <BaseContentPlaceholders v-if="isLoading"> | ||||||
|  |               <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> | ||||||
|  |             </BaseContentPlaceholders> | ||||||
|  |             <span v-else class="pl-7"> | ||||||
|  |               {{ $tc('items.item', 2) }} | ||||||
|  |             </span> | ||||||
|  |           </th> | ||||||
|  |           <th class="text-right" :class="theadClass"> | ||||||
|  |             <BaseContentPlaceholders v-if="isLoading"> | ||||||
|  |               <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> | ||||||
|  |             </BaseContentPlaceholders> | ||||||
|  |             <span v-else> | ||||||
|  |               {{ $t('invoices.item.quantity') }} | ||||||
|  |             </span> | ||||||
|  |           </th> | ||||||
|  |           <th class="text-left" :class="theadClass"> | ||||||
|  |             <BaseContentPlaceholders v-if="isLoading"> | ||||||
|  |               <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> | ||||||
|  |             </BaseContentPlaceholders> | ||||||
|  |             <span v-else> | ||||||
|  |               {{ $t('invoices.item.price') }} | ||||||
|  |             </span> | ||||||
|  |           </th> | ||||||
|  |           <th | ||||||
|  |             v-if="store[storeProp].discount_per_item_enabled" | ||||||
|  |             class="text-left" | ||||||
|  |             :class="theadClass" | ||||||
|  |           > | ||||||
|  |             <BaseContentPlaceholders v-if="isLoading"> | ||||||
|  |               <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> | ||||||
|  |             </BaseContentPlaceholders> | ||||||
|  |             <span v-else> | ||||||
|  |               {{ $t('invoices.item.discount') }} | ||||||
|  |             </span> | ||||||
|  |           </th> | ||||||
|  |           <th class="text-right" :class="theadClass"> | ||||||
|  |             <BaseContentPlaceholders v-if="isLoading"> | ||||||
|  |               <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> | ||||||
|  |             </BaseContentPlaceholders> | ||||||
|  |             <span v-else class="pr-10 column-heading"> | ||||||
|  |               {{ $t('invoices.item.amount') }} | ||||||
|  |             </span> | ||||||
|  |           </th> | ||||||
|  |         </tr> | ||||||
|  |       </thead> | ||||||
|  |       <draggable | ||||||
|  |         v-model="store[storeProp].items" | ||||||
|  |         item-key="id" | ||||||
|  |         tag="tbody" | ||||||
|  |         handle=".handle" | ||||||
|  |       > | ||||||
|  |         <template #item="{ element, index }"> | ||||||
|  |           <Item | ||||||
|  |             :key="element.id" | ||||||
|  |             :index="index" | ||||||
|  |             :item-data="element" | ||||||
|  |             :loading="isLoading" | ||||||
|  |             :currency="defaultCurrency" | ||||||
|  |             :item-validation-scope="itemValidationScope" | ||||||
|  |             :invoice-items="store[storeProp].items" | ||||||
|  |             :store="store" | ||||||
|  |             :store-prop="storeProp" | ||||||
|  |           /> | ||||||
|  |         </template> | ||||||
|  |       </draggable> | ||||||
|  |     </table> | ||||||
|  |  | ||||||
|   <div |     <div | ||||||
|     class=" |       class=" | ||||||
|       flex |         flex | ||||||
|       items-center |         items-center | ||||||
|       justify-center |         justify-center | ||||||
|       w-full |         w-full | ||||||
|       px-6 |         px-6 | ||||||
|       py-3 |         py-3 | ||||||
|       text-base |         text-base | ||||||
|       border border-t-0 border-gray-200 border-solid |         border border-t-0 border-gray-200 border-solid | ||||||
|       cursor-pointer |         cursor-pointer | ||||||
|       text-primary-400 |         text-primary-400 | ||||||
|       hover:bg-primary-100 |         hover:bg-primary-100 | ||||||
|     " |         dark:bg-gray-900/50 dark:border-white/10 dark:hover:bg-gray-900/80 | ||||||
|     @click="store.addItem" |       " | ||||||
|   > |       @click="store.addItem" | ||||||
|     <BaseIcon name="PlusCircleIcon" class="mr-2" /> |     > | ||||||
|     {{ $t('general.add_new_item') }} |       <BaseIcon name="PlusCircleIcon" class="mr-2" /> | ||||||
|  |       {{ $t('general.add_new_item') }} | ||||||
|  |     </div> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| @ -180,6 +138,11 @@ const props = defineProps({ | |||||||
|     type: String, |     type: String, | ||||||
|     default: '', |     default: '', | ||||||
|   }, |   }, | ||||||
|  |   theadClass: { | ||||||
|  |     type: String, | ||||||
|  |     default: `px-5 py-3 text-sm not-italic font-medium leading-5 | ||||||
|  |               text-gray-700 border-t border-b border-gray-200 border-solid dark:text-white dark:border-white/10` | ||||||
|  |   }, | ||||||
| }) | }) | ||||||
|  |  | ||||||
| const companyStore = useCompanyStore() | const companyStore = useCompanyStore() | ||||||
|  | |||||||
| @ -6,6 +6,7 @@ | |||||||
|       mt-6 |       mt-6 | ||||||
|       bg-white |       bg-white | ||||||
|       border border-gray-200 border-solid |       border border-gray-200 border-solid | ||||||
|  |       dark:bg-gray-800/50 dark:border-white/10 | ||||||
|       rounded |       rounded | ||||||
|       md:min-w-[390px] |       md:min-w-[390px] | ||||||
|       min-w-[300px] |       min-w-[300px] | ||||||
| @ -192,6 +193,7 @@ | |||||||
|         pt-2 |         pt-2 | ||||||
|         mt-5 |         mt-5 | ||||||
|         border-t border-gray-200 border-solid |         border-t border-gray-200 border-solid | ||||||
|  |         dark:border-gray-600 | ||||||
|       " |       " | ||||||
|     > |     > | ||||||
|       <BaseContentPlaceholders v-if="isLoading"> |       <BaseContentPlaceholders v-if="isLoading"> | ||||||
| @ -199,7 +201,7 @@ | |||||||
|       </BaseContentPlaceholders> |       </BaseContentPlaceholders> | ||||||
|       <label |       <label | ||||||
|         v-else |         v-else | ||||||
|         class="m-0 text-sm font-semibold leading-5 text-gray-400 uppercase" |         class="m-0 text-sm font-semibold leading-5 text-gray-400 uppercase dark:text-gray-400" | ||||||
|         >{{ $t('estimates.total') }} {{ $t('estimates.amount') }}:</label |         >{{ $t('estimates.total') }} {{ $t('estimates.amount') }}:</label | ||||||
|       > |       > | ||||||
|  |  | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ | |||||||
|  |  | ||||||
|       <BaseIcon |       <BaseIcon | ||||||
|         name="TrashIcon" |         name="TrashIcon" | ||||||
|         class="h-5 ml-2 cursor-pointer" |         class="h-5 ml-2 cursor-pointer dark:text-red-400" | ||||||
|         @click="$emit('remove', tax.id)" |         @click="$emit('remove', tax.id)" | ||||||
|       /> |       /> | ||||||
|     </label> |     </label> | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ | |||||||
|             > |             > | ||||||
|               <!-- Tax Search Input  --> |               <!-- Tax Search Input  --> | ||||||
|  |  | ||||||
|               <div class="relative bg-white"> |               <div class="relative bg-white dark:bg-gray-800"> | ||||||
|                 <div class="relative p-4"> |                 <div class="relative p-4"> | ||||||
|                   <BaseInput |                   <BaseInput | ||||||
|                     v-model="textSearch" |                     v-model="textSearch" | ||||||
| @ -65,13 +65,14 @@ | |||||||
|                     list |                     list | ||||||
|                     max-h-36 |                     max-h-36 | ||||||
|                     border-t border-gray-200 |                     border-t border-gray-200 | ||||||
|  |                     dark:border-gray-600 | ||||||
|                   " |                   " | ||||||
|                 > |                 > | ||||||
|                   <div |                   <div | ||||||
|                     v-for="(taxType, index) in filteredTaxType" |                     v-for="(taxType, index) in filteredTaxType" | ||||||
|                     :key="index" |                     :key="index" | ||||||
|                     :class="{ |                     :class="{ | ||||||
|                       'bg-gray-100 cursor-not-allowed opacity-50 pointer-events-none': |                       'bg-gray-100 cursor-not-allowed opacity-50 pointer-events-none dark:bg-gray-900': | ||||||
|                         taxes.find((val) => { |                         taxes.find((val) => { | ||||||
|                           return val.tax_type_id === taxType.id |                           return val.tax_type_id === taxType.id | ||||||
|                         }), |                         }), | ||||||
| @ -84,6 +85,7 @@ | |||||||
|                       cursor-pointer |                       cursor-pointer | ||||||
|                       hover:bg-gray-100 hover:cursor-pointer |                       hover:bg-gray-100 hover:cursor-pointer | ||||||
|                       last:border-b-0 |                       last:border-b-0 | ||||||
|  |                       dark:border-gray-600 dark:hover:bg-gray-700/20 | ||||||
|                     " |                     " | ||||||
|                     @click="selectTaxType(taxType, close)" |                     @click="selectTaxType(taxType, close)" | ||||||
|                   > |                   > | ||||||
| @ -140,6 +142,10 @@ | |||||||
|                   bg-gray-200 |                   bg-gray-200 | ||||||
|                   border-none |                   border-none | ||||||
|                   outline-none |                   outline-none | ||||||
|  |                   dark:bg-gray-600/70 | ||||||
|  |                   dark:backdrop-blur-xl | ||||||
|  |                   dark:shadow-glass | ||||||
|  |                   dark:hover:bg-gray-600/80 | ||||||
|                 " |                 " | ||||||
|                 @click="openTaxTypeModal" |                 @click="openTaxTypeModal" | ||||||
|               > |               > | ||||||
|  | |||||||
| @ -50,6 +50,7 @@ | |||||||
|         xl:ml-64 |         xl:ml-64 | ||||||
|         w-88 |         w-88 | ||||||
|         xl:block |         xl:block | ||||||
|  |         dark:bg-gray-800 | ||||||
|       " |       " | ||||||
|     > |     > | ||||||
|       <div |       <div | ||||||
| @ -62,6 +63,7 @@ | |||||||
|           pb-2 |           pb-2 | ||||||
|           border border-gray-200 border-solid |           border border-gray-200 border-solid | ||||||
|           height-full |           height-full | ||||||
|  |           dark:border-gray-600 | ||||||
|         " |         " | ||||||
|       > |       > | ||||||
|         <div class="mb-6"> |         <div class="mb-6"> | ||||||
| @ -96,9 +98,10 @@ | |||||||
|                 px-4 |                 px-4 | ||||||
|                 py-1 |                 py-1 | ||||||
|                 pb-2 |                 pb-2 | ||||||
|                 mb-1 mb-2 |                 mb-2 | ||||||
|                 text-sm |                 text-sm | ||||||
|                 border-b border-gray-200 border-solid |                 border-b border-gray-200 border-solid | ||||||
|  |                 dark:border-gray-600 | ||||||
|               " |               " | ||||||
|             > |             > | ||||||
|               {{ $t('general.sort_by') }} |               {{ $t('general.sort_by') }} | ||||||
| @ -161,6 +164,7 @@ | |||||||
|           overflow-y-scroll |           overflow-y-scroll | ||||||
|           border-l border-gray-200 border-solid |           border-l border-gray-200 border-solid | ||||||
|           base-scroll |           base-scroll | ||||||
|  |           dark:border-gray-600 | ||||||
|         " |         " | ||||||
|       > |       > | ||||||
|         <div v-for="(estimate, index) in estimateList" :key="index"> |         <div v-for="(estimate, index) in estimateList" :key="index"> | ||||||
| @ -169,9 +173,9 @@ | |||||||
|             :id="'estimate-' + estimate.id" |             :id="'estimate-' + estimate.id" | ||||||
|             :to="`/admin/estimates/${estimate.id}/view`" |             :to="`/admin/estimates/${estimate.id}/view`" | ||||||
|             :class="[ |             :class="[ | ||||||
|               'flex justify-between side-estimate p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent', |               'flex justify-between side-estimate p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent dark:hover:bg-gray-700', | ||||||
|               { |               { | ||||||
|                 'bg-gray-100 border-l-4 border-primary-500 border-solid': |                 'bg-gray-100 border-l-4 border-primary-500 border-solid dark:border-primary-400 dark:bg-gray-700': | ||||||
|                   hasActiveUrl(estimate.id), |                   hasActiveUrl(estimate.id), | ||||||
|               }, |               }, | ||||||
|             ]" |             ]" | ||||||
| @ -191,6 +195,7 @@ | |||||||
|                   text-black |                   text-black | ||||||
|                   capitalize |                   capitalize | ||||||
|                   truncate |                   truncate | ||||||
|  |                   dark:text-white | ||||||
|                 " |                 " | ||||||
|               /> |               /> | ||||||
|  |  | ||||||
| @ -203,6 +208,7 @@ | |||||||
|                   font-medium |                   font-medium | ||||||
|                   leading-5 |                   leading-5 | ||||||
|                   text-gray-600 |                   text-gray-600 | ||||||
|  |                   dark:text-gray-400 | ||||||
|                 " |                 " | ||||||
|               > |               > | ||||||
|                 {{ estimate.estimate_number }} |                 {{ estimate.estimate_number }} | ||||||
| @ -228,6 +234,7 @@ | |||||||
|                   font-semibold |                   font-semibold | ||||||
|                   leading-8 |                   leading-8 | ||||||
|                   text-right text-gray-900 |                   text-right text-gray-900 | ||||||
|  |                   dark:text-white | ||||||
|                 " |                 " | ||||||
|               /> |               /> | ||||||
|  |  | ||||||
| @ -239,6 +246,7 @@ | |||||||
|                   leading-5 |                   leading-5 | ||||||
|                   text-right text-gray-600 |                   text-right text-gray-600 | ||||||
|                   est-date |                   est-date | ||||||
|  |                   dark:text-gray-400 | ||||||
|                 " |                 " | ||||||
|               > |               > | ||||||
|                 {{ estimate.formatted_estimate_date }} |                 {{ estimate.formatted_estimate_date }} | ||||||
| @ -251,7 +259,7 @@ | |||||||
|         </div> |         </div> | ||||||
|         <p |         <p | ||||||
|           v-if="!estimateList?.length && !isLoading" |           v-if="!estimateList?.length && !isLoading" | ||||||
|           class="flex justify-center px-4 mt-5 text-sm text-gray-600" |           class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300" | ||||||
|         > |         > | ||||||
|           {{ $t('estimates.no_matching_estimates') }} |           {{ $t('estimates.no_matching_estimates') }} | ||||||
|         </p> |         </p> | ||||||
|  | |||||||
| @ -299,6 +299,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|         xl:ml-64 |         xl:ml-64 | ||||||
|         w-88 |         w-88 | ||||||
|         xl:block |         xl:block | ||||||
|  |         dark:bg-gray-800 | ||||||
|       " |       " | ||||||
|     > |     > | ||||||
|       <div |       <div | ||||||
| @ -311,6 +312,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|           pb-2 |           pb-2 | ||||||
|           border border-gray-200 border-solid |           border border-gray-200 border-solid | ||||||
|           height-full |           height-full | ||||||
|  |           dark:border-gray-600 | ||||||
|         " |         " | ||||||
|       > |       > | ||||||
|         <div class="mb-6"> |         <div class="mb-6"> | ||||||
| @ -339,9 +341,10 @@ onSearched = debounce(onSearched, 500) | |||||||
|                 px-2 |                 px-2 | ||||||
|                 py-1 |                 py-1 | ||||||
|                 pb-2 |                 pb-2 | ||||||
|                 mb-1 mb-2 |                 mb-2 | ||||||
|                 text-sm |                 text-sm | ||||||
|                 border-b border-gray-200 border-solid |                 border-b border-gray-200 border-solid | ||||||
|  |                 dark:border-gray-600 | ||||||
|               " |               " | ||||||
|             > |             > | ||||||
|               {{ $t('general.sort_by') }} |               {{ $t('general.sort_by') }} | ||||||
| @ -404,6 +407,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|           overflow-y-scroll |           overflow-y-scroll | ||||||
|           border-l border-gray-200 border-solid |           border-l border-gray-200 border-solid | ||||||
|           base-scroll |           base-scroll | ||||||
|  |           dark:border-gray-600 | ||||||
|         " |         " | ||||||
|       > |       > | ||||||
|         <div v-for="(invoice, index) in invoiceList" :key="index"> |         <div v-for="(invoice, index) in invoiceList" :key="index"> | ||||||
| @ -412,9 +416,9 @@ onSearched = debounce(onSearched, 500) | |||||||
|             :id="'invoice-' + invoice.id" |             :id="'invoice-' + invoice.id" | ||||||
|             :to="`/admin/invoices/${invoice.id}/view`" |             :to="`/admin/invoices/${invoice.id}/view`" | ||||||
|             :class="[ |             :class="[ | ||||||
|               'flex justify-between side-invoice p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent', |               'flex justify-between side-invoice p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent dark:hover:bg-gray-700', | ||||||
|               { |               { | ||||||
|                 'bg-gray-100 border-l-4 border-primary-500 border-solid': |                 'bg-gray-100 border-l-4 border-primary-500 border-solid dark:bg-gray-700': | ||||||
|                   hasActiveUrl(invoice.id), |                   hasActiveUrl(invoice.id), | ||||||
|               }, |               }, | ||||||
|             ]" |             ]" | ||||||
| @ -434,6 +438,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|                   text-black |                   text-black | ||||||
|                   capitalize |                   capitalize | ||||||
|                   truncate |                   truncate | ||||||
|  |                   dark:text-white | ||||||
|                 " |                 " | ||||||
|               /> |               /> | ||||||
|  |  | ||||||
| @ -446,16 +451,17 @@ onSearched = debounce(onSearched, 500) | |||||||
|                   font-medium |                   font-medium | ||||||
|                   leading-5 |                   leading-5 | ||||||
|                   text-gray-600 |                   text-gray-600 | ||||||
|  |                   dark:text-gray-400 | ||||||
|                 " |                 " | ||||||
|               > |               > | ||||||
|                 {{ invoice.invoice_number }} |                 {{ invoice.invoice_number }} | ||||||
|               </div> |               </div> | ||||||
|               <BaseEstimateStatusBadge |               <BaseInvoiceStatusBadge | ||||||
|                 :status="invoice.status" |                 :status="invoice.status" | ||||||
|                 class="px-1 text-xs" |                 class="px-1 text-xs" | ||||||
|               > |               > | ||||||
|                 {{ invoice.status }} |                 {{ invoice.status }} | ||||||
|               </BaseEstimateStatusBadge> |               </BaseInvoiceStatusBadge> | ||||||
|             </div> |             </div> | ||||||
|  |  | ||||||
|             <div class="flex-1 whitespace-nowrap right"> |             <div class="flex-1 whitespace-nowrap right"> | ||||||
| @ -468,6 +474,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|                   leading-8 |                   leading-8 | ||||||
|                   text-right text-gray-900 |                   text-right text-gray-900 | ||||||
|                   block |                   block | ||||||
|  |                   dark:text-white | ||||||
|                 " |                 " | ||||||
|                 :amount="invoice.total" |                 :amount="invoice.total" | ||||||
|                 :currency="invoice.customer.currency" |                 :currency="invoice.customer.currency" | ||||||
| @ -480,6 +487,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|                   leading-5 |                   leading-5 | ||||||
|                   text-right text-gray-600 |                   text-right text-gray-600 | ||||||
|                   est-date |                   est-date | ||||||
|  |                   dark:text-gray-400 | ||||||
|                 " |                 " | ||||||
|               > |               > | ||||||
|                 {{ invoice.formatted_invoice_date }} |                 {{ invoice.formatted_invoice_date }} | ||||||
| @ -492,7 +500,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|         </div> |         </div> | ||||||
|         <p |         <p | ||||||
|           v-if="!invoiceList?.length && !isLoading" |           v-if="!invoiceList?.length && !isLoading" | ||||||
|           class="flex justify-center px-4 mt-5 text-sm text-gray-600" |           class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300" | ||||||
|         > |         > | ||||||
|           {{ $t('invoices.no_matching_invoices') }} |           {{ $t('invoices.no_matching_invoices') }} | ||||||
|         </p> |         </p> | ||||||
|  | |||||||
| @ -35,6 +35,7 @@ | |||||||
|         xl:ml-64 |         xl:ml-64 | ||||||
|         w-88 |         w-88 | ||||||
|         xl:block |         xl:block | ||||||
|  |         dark:bg-gray-800 | ||||||
|       " |       " | ||||||
|     > |     > | ||||||
|       <div |       <div | ||||||
| @ -46,6 +47,7 @@ | |||||||
|           pt-8 |           pt-8 | ||||||
|           pb-6 |           pb-6 | ||||||
|           border border-gray-200 border-solid |           border border-gray-200 border-solid | ||||||
|  |           dark:border-gray-600 | ||||||
|         " |         " | ||||||
|       > |       > | ||||||
|         <BaseInput |         <BaseInput | ||||||
| @ -77,6 +79,7 @@ | |||||||
|                 mb-2 |                 mb-2 | ||||||
|                 text-sm |                 text-sm | ||||||
|                 border-b border-gray-200 border-solid |                 border-b border-gray-200 border-solid | ||||||
|  |                 dark:border-gray-600 | ||||||
|               " |               " | ||||||
|             > |             > | ||||||
|               {{ $t('general.sort_by') }} |               {{ $t('general.sort_by') }} | ||||||
| @ -139,7 +142,7 @@ | |||||||
|  |  | ||||||
|       <div |       <div | ||||||
|         ref="paymentListSection" |         ref="paymentListSection" | ||||||
|         class="h-full overflow-y-scroll border-l border-gray-200 border-solid" |         class="h-full overflow-y-scroll border-l border-gray-200 border-solid dark:border-gray-600" | ||||||
|       > |       > | ||||||
|         <div v-for="(payment, index) in paymentList" :key="index"> |         <div v-for="(payment, index) in paymentList" :key="index"> | ||||||
|           <router-link |           <router-link | ||||||
| @ -147,9 +150,9 @@ | |||||||
|             :id="'payment-' + payment.id" |             :id="'payment-' + payment.id" | ||||||
|             :to="`/admin/payments/${payment.id}/view`" |             :to="`/admin/payments/${payment.id}/view`" | ||||||
|             :class="[ |             :class="[ | ||||||
|               'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent', |               'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent dark:hover:bg-gray-700', | ||||||
|               { |               { | ||||||
|                 'bg-gray-100 border-l-4 border-primary-500 border-solid': |                 'bg-gray-100 border-l-4 border-primary-500 border-solid dark:bg-gray-700': | ||||||
|                   hasActiveUrl(payment.id), |                   hasActiveUrl(payment.id), | ||||||
|               }, |               }, | ||||||
|             ]" |             ]" | ||||||
| @ -169,6 +172,7 @@ | |||||||
|                   text-black |                   text-black | ||||||
|                   capitalize |                   capitalize | ||||||
|                   truncate |                   truncate | ||||||
|  |                   dark:text-white | ||||||
|                 " |                 " | ||||||
|               /> |               /> | ||||||
|  |  | ||||||
| @ -181,6 +185,7 @@ | |||||||
|                   leading-5 |                   leading-5 | ||||||
|                   text-gray-500 |                   text-gray-500 | ||||||
|                   capitalize |                   capitalize | ||||||
|  |                   dark:text-gray-400 | ||||||
|                 " |                 " | ||||||
|               > |               > | ||||||
|                 {{ payment?.payment_number }} |                 {{ payment?.payment_number }} | ||||||
| @ -211,12 +216,13 @@ | |||||||
|                   font-semibold |                   font-semibold | ||||||
|                   leading-8 |                   leading-8 | ||||||
|                   text-right text-gray-900 |                   text-right text-gray-900 | ||||||
|  |                   dark:text-white | ||||||
|                 " |                 " | ||||||
|                 :amount="payment?.amount" |                 :amount="payment?.amount" | ||||||
|                 :currency="payment.customer?.currency" |                 :currency="payment.customer?.currency" | ||||||
|               /> |               /> | ||||||
|  |  | ||||||
|               <div class="text-sm text-right text-gray-500 non-italic"> |               <div class="text-sm text-right text-gray-500 non-italic dark:text-gray-400"> | ||||||
|                 {{ payment.formatted_payment_date }} |                 {{ payment.formatted_payment_date }} | ||||||
|               </div> |               </div> | ||||||
|             </div> |             </div> | ||||||
| @ -227,7 +233,7 @@ | |||||||
|         </div> |         </div> | ||||||
|         <p |         <p | ||||||
|           v-if="!paymentList?.length && !isLoading" |           v-if="!paymentList?.length && !isLoading" | ||||||
|           class="flex justify-center px-4 mt-5 text-sm text-gray-600" |           class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300" | ||||||
|         > |         > | ||||||
|           {{ $t('payments.no_matching_payments') }} |           {{ $t('payments.no_matching_payments') }} | ||||||
|         </p> |         </p> | ||||||
|  | |||||||
| @ -152,6 +152,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|       xl:ml-64 |       xl:ml-64 | ||||||
|       w-88 |       w-88 | ||||||
|       xl:block |       xl:block | ||||||
|  |       dark:bg-gray-800 | ||||||
|     " |     " | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
| @ -164,6 +165,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|         pb-2 |         pb-2 | ||||||
|         border border-gray-200 border-solid |         border border-gray-200 border-solid | ||||||
|         height-full |         height-full | ||||||
|  |         dark:border-gray-600 | ||||||
|       " |       " | ||||||
|     > |     > | ||||||
|       <div class="mb-6"> |       <div class="mb-6"> | ||||||
| @ -192,9 +194,10 @@ onSearched = debounce(onSearched, 500) | |||||||
|               px-2 |               px-2 | ||||||
|               py-1 |               py-1 | ||||||
|               pb-2 |               pb-2 | ||||||
|               mb-1 mb-2 |               mb-2 | ||||||
|               text-sm |               text-sm | ||||||
|               border-b border-gray-200 border-solid |               border-b border-gray-200 border-solid | ||||||
|  |               dark:border-gray-600 | ||||||
|             " |             " | ||||||
|           > |           > | ||||||
|             {{ $t('general.sort_by') }} |             {{ $t('general.sort_by') }} | ||||||
| @ -243,6 +246,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|         overflow-y-scroll |         overflow-y-scroll | ||||||
|         border-l border-gray-200 border-solid |         border-l border-gray-200 border-solid | ||||||
|         base-scroll |         base-scroll | ||||||
|  |         dark:border-gray-600 | ||||||
|       " |       " | ||||||
|     > |     > | ||||||
|       <div v-for="(invoice, index) in invoiceList" :key="index"> |       <div v-for="(invoice, index) in invoiceList" :key="index"> | ||||||
| @ -251,9 +255,9 @@ onSearched = debounce(onSearched, 500) | |||||||
|           :id="'recurring-invoice-' + invoice.id" |           :id="'recurring-invoice-' + invoice.id" | ||||||
|           :to="`/admin/recurring-invoices/${invoice.id}/view`" |           :to="`/admin/recurring-invoices/${invoice.id}/view`" | ||||||
|           :class="[ |           :class="[ | ||||||
|             'flex justify-between side-invoice p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent', |             'flex justify-between side-invoice p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent dark:hover:bg-gray-700', | ||||||
|             { |             { | ||||||
|               'bg-gray-100 border-l-4 border-primary-500 border-solid': |               'bg-gray-100 border-l-4 border-primary-500 border-solid dark:bg-gray-700': | ||||||
|                 hasActiveUrl(invoice.id), |                 hasActiveUrl(invoice.id), | ||||||
|             }, |             }, | ||||||
|           ]" |           ]" | ||||||
| @ -273,6 +277,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|                 text-black |                 text-black | ||||||
|                 capitalize |                 capitalize | ||||||
|                 truncate |                 truncate | ||||||
|  |                 dark:text-white | ||||||
|               " |               " | ||||||
|             /> |             /> | ||||||
|  |  | ||||||
| @ -285,6 +290,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|                 font-medium |                 font-medium | ||||||
|                 leading-5 |                 leading-5 | ||||||
|                 text-gray-600 |                 text-gray-600 | ||||||
|  |                 dark:text-gray-400 | ||||||
|               " |               " | ||||||
|             > |             > | ||||||
|               {{ invoice.invoice_number }} |               {{ invoice.invoice_number }} | ||||||
| @ -307,6 +313,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|                 font-semibold |                 font-semibold | ||||||
|                 leading-8 |                 leading-8 | ||||||
|                 text-right text-gray-900 |                 text-right text-gray-900 | ||||||
|  |                 dark:text-white | ||||||
|               " |               " | ||||||
|               :amount="invoice.total" |               :amount="invoice.total" | ||||||
|               :currency="invoice.customer.currency" |               :currency="invoice.customer.currency" | ||||||
| @ -320,6 +327,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|                 leading-5 |                 leading-5 | ||||||
|                 text-right text-gray-600 |                 text-right text-gray-600 | ||||||
|                 est-date |                 est-date | ||||||
|  |                 dark:text-gray-400 | ||||||
|               " |               " | ||||||
|             > |             > | ||||||
|               {{ invoice.formatted_starts_at }} |               {{ invoice.formatted_starts_at }} | ||||||
| @ -332,7 +340,7 @@ onSearched = debounce(onSearched, 500) | |||||||
|       </div> |       </div> | ||||||
|       <p |       <p | ||||||
|         v-if="!invoiceList?.length && !isLoading" |         v-if="!invoiceList?.length && !isLoading" | ||||||
|         class="flex justify-center px-4 mt-5 text-sm text-gray-600" |         class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300" | ||||||
|       > |       > | ||||||
|         {{ $t('invoices.no_matching_invoices') }} |         {{ $t('invoices.no_matching_invoices') }} | ||||||
|       </p> |       </p> | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	