mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 04:01:10 -04:00
Compare commits
3 Commits
dependabot
...
fix-tax-is
| Author | SHA1 | Date | |
|---|---|---|---|
| c8ee6389a4 | |||
| e4bd002fae | |||
| 05abf7fa74 |
161
.github/workflows/uffizzi-build.yml
vendored
161
.github/workflows/uffizzi-build.yml
vendored
@ -1,161 +0,0 @@
|
|||||||
name: Build PR Image
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened,synchronize,reopened,closed]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
build-application:
|
|
||||||
name: Build and Push `application`
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
|
|
||||||
outputs:
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout git repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Generate UUID image name
|
|
||||||
id: uuid
|
|
||||||
run: echo "UUID_TAG_APP=$(uuidgen)" >> $GITHUB_ENV
|
|
||||||
- name: Docker metadata
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v3
|
|
||||||
with:
|
|
||||||
images: registry.uffizzi.com/${{ env.UUID_TAG_APP }}
|
|
||||||
tags: type=raw,value=60d
|
|
||||||
- name: Build and Push Image to registry.uffizzi.com ephemeral registry
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
push: true
|
|
||||||
context: ./
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
file: ./uffizzi/Dockerfile
|
|
||||||
|
|
||||||
build-nginx:
|
|
||||||
needs:
|
|
||||||
- build-application
|
|
||||||
name: Build and Push `nginx`
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
|
|
||||||
outputs:
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout git repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
- name: Generate UUID image name
|
|
||||||
id: uuid
|
|
||||||
run: echo "UUID_TAG_NGINX=$(uuidgen)" >> $GITHUB_ENV
|
|
||||||
- name: Docker metadata
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v3
|
|
||||||
with:
|
|
||||||
images: registry.uffizzi.com/${{ env.UUID_TAG_NGINX }}
|
|
||||||
tags: type=raw,value=60d
|
|
||||||
- name: Build and Push Image to Uffizzi ephemeral registry
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
push: true
|
|
||||||
context: ./
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
file: ./uffizzi/nginx/Dockerfile
|
|
||||||
build-args: |
|
|
||||||
BASE_IMAGE=${{ needs.build-application.outputs.tags }}
|
|
||||||
cache-from: type=gha
|
|
||||||
cache-to: type=gha,mode=max
|
|
||||||
|
|
||||||
|
|
||||||
build-crond:
|
|
||||||
name: Build and Push `crond`
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
|
|
||||||
outputs:
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout git repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
- name: Generate UUID image name
|
|
||||||
id: uuid
|
|
||||||
run: echo "UUID_TAG_CROND=$(uuidgen)" >> $GITHUB_ENV
|
|
||||||
- name: Docker metadata
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v3
|
|
||||||
with:
|
|
||||||
images: registry.uffizzi.com/${{ env.UUID_TAG_CROND }}
|
|
||||||
tags: type=raw,value=60d
|
|
||||||
- name: Build and Push Image to registry.uffizzi.com ephemeral registry
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
push: true
|
|
||||||
context: ./
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
file: ./uffizzi/crond/Dockerfile
|
|
||||||
cache-from: type=gha
|
|
||||||
cache-to: type=gha,mode=max
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
render-compose-file:
|
|
||||||
name: Render Docker Compose File
|
|
||||||
# Pass output of this workflow to another triggered by `workflow_run` event.
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
compose-file-cache-key: ${{ steps.hash.outputs.hash }}
|
|
||||||
needs:
|
|
||||||
- build-application
|
|
||||||
- build-nginx
|
|
||||||
- build-crond
|
|
||||||
steps:
|
|
||||||
- name: Checkout git repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Render Compose File
|
|
||||||
run: |
|
|
||||||
APP_IMAGE=$(echo ${{ needs.build-application.outputs.tags }})
|
|
||||||
export APP_IMAGE
|
|
||||||
NGINX_IMAGE=$(echo ${{ needs.build-nginx.outputs.tags }})
|
|
||||||
export NGINX_IMAGE
|
|
||||||
CROND_IMAGE=$(echo ${{ needs.build-crond.outputs.tags }})
|
|
||||||
export CROND_IMAGE
|
|
||||||
# Render simple template from environment variables.
|
|
||||||
envsubst < ./uffizzi/docker-compose.uffizzi.yml > docker-compose.rendered.yml
|
|
||||||
cat docker-compose.rendered.yml
|
|
||||||
- name: Upload Rendered Compose File as Artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: preview-spec
|
|
||||||
path: docker-compose.rendered.yml
|
|
||||||
retention-days: 2
|
|
||||||
- name: Serialize PR Event to File
|
|
||||||
run: |
|
|
||||||
cat << EOF > event.json
|
|
||||||
${{ toJSON(github.event) }}
|
|
||||||
|
|
||||||
EOF
|
|
||||||
- name: Upload PR Event as Artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: preview-spec
|
|
||||||
path: event.json
|
|
||||||
retention-days: 2
|
|
||||||
|
|
||||||
delete-preview:
|
|
||||||
name: Call for Preview Deletion
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event.action == 'closed' }}
|
|
||||||
steps:
|
|
||||||
# If this PR is closing, we will not render a compose file nor pass it to the next workflow.
|
|
||||||
- name: Serialize PR Event to File
|
|
||||||
run: echo '${{ toJSON(github.event) }}' > event.json
|
|
||||||
- name: Upload PR Event as Artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: preview-spec
|
|
||||||
path: event.json
|
|
||||||
retention-days: 2
|
|
||||||
|
|
||||||
84
.github/workflows/uffizzi-preview.yml
vendored
84
.github/workflows/uffizzi-preview.yml
vendored
@ -1,84 +0,0 @@
|
|||||||
name: Deploy Uffizzi Preview
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_run:
|
|
||||||
workflows:
|
|
||||||
- "Build PR Image"
|
|
||||||
types:
|
|
||||||
- completed
|
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
cache-compose-file:
|
|
||||||
name: Cache Compose File
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
compose-file-cache-key: ${{ env.COMPOSE_FILE_HASH }}
|
|
||||||
pr-number: ${{ env.PR_NUMBER }}
|
|
||||||
steps:
|
|
||||||
- name: 'Download artifacts'
|
|
||||||
# Fetch output (zip archive) from the workflow run that triggered this workflow.
|
|
||||||
uses: actions/github-script@v6
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
run_id: context.payload.workflow_run.id,
|
|
||||||
});
|
|
||||||
let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
|
|
||||||
return artifact.name == "preview-spec"
|
|
||||||
})[0];
|
|
||||||
let download = await github.rest.actions.downloadArtifact({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
artifact_id: matchArtifact.id,
|
|
||||||
archive_format: 'zip',
|
|
||||||
});
|
|
||||||
let fs = require('fs');
|
|
||||||
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/preview-spec.zip`, Buffer.from(download.data));
|
|
||||||
- name: 'Unzip artifact'
|
|
||||||
run: unzip preview-spec.zip
|
|
||||||
- name: Read Event into ENV
|
|
||||||
run: |
|
|
||||||
echo 'EVENT_JSON<<EOF' >> $GITHUB_ENV
|
|
||||||
cat event.json >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
- name: Hash Rendered Compose File
|
|
||||||
id: hash
|
|
||||||
# If the previous workflow was triggered by a PR close event, we will not have a compose file artifact.
|
|
||||||
if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }}
|
|
||||||
run: echo "COMPOSE_FILE_HASH=$(md5sum docker-compose.rendered.yml | awk '{ print $1 }')" >> $GITHUB_ENV
|
|
||||||
- name: Cache Rendered Compose File
|
|
||||||
if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }}
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: docker-compose.rendered.yml
|
|
||||||
key: ${{ env.COMPOSE_FILE_HASH }}
|
|
||||||
|
|
||||||
- name: Read PR Number From Event Object
|
|
||||||
id: pr
|
|
||||||
run: echo "PR_NUMBER=${{ fromJSON(env.EVENT_JSON).number }}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: DEBUG - Print Job Outputs
|
|
||||||
if: ${{ runner.debug }}
|
|
||||||
run: |
|
|
||||||
echo "PR number: ${{ env.PR_NUMBER }}"
|
|
||||||
echo "Compose file hash: ${{ env.COMPOSE_FILE_HASH }}"
|
|
||||||
cat event.json
|
|
||||||
deploy-uffizzi-preview:
|
|
||||||
name: Use Remote Workflow to Preview on Uffizzi
|
|
||||||
needs:
|
|
||||||
- cache-compose-file
|
|
||||||
uses: UffizziCloud/preview-action/.github/workflows/reusable.yaml@v2.6.1
|
|
||||||
with:
|
|
||||||
# If this workflow was triggered by a PR close event, cache-key will be an empty string
|
|
||||||
# and this reusable workflow will delete the preview deployment.
|
|
||||||
compose-file-cache-key: ${{ needs.cache-compose-file.outputs.compose-file-cache-key }}
|
|
||||||
compose-file-cache-path: docker-compose.rendered.yml
|
|
||||||
server: https://app.uffizzi.com/
|
|
||||||
pr-number: ${{ needs.cache-compose-file.outputs.pr-number }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: write
|
|
||||||
id-token: write
|
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@ -16,5 +16,3 @@ Homestead.yaml
|
|||||||
.gitkeep
|
.gitkeep
|
||||||
/public/docs
|
/public/docs
|
||||||
/.scribe
|
/.scribe
|
||||||
!storage/fonts/.gitkeep
|
|
||||||
.DS_Store
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
FROM php:8.1-fpm
|
FROM php:7.4-fpm
|
||||||
|
|
||||||
# Arguments defined in docker-compose.yml
|
# Arguments defined in docker-compose.yml
|
||||||
ARG user
|
ARG user
|
||||||
|
|||||||
@ -55,7 +55,7 @@ class CreateTemplateCommand extends Command
|
|||||||
copy(public_path("/build/img/PDF/{$type}1.png"), public_path("/build/img/PDF/{$templateName}.png"));
|
copy(public_path("/build/img/PDF/{$type}1.png"), public_path("/build/img/PDF/{$templateName}.png"));
|
||||||
copy(resource_path("/static/img/PDF/{$type}1.png"), resource_path("/static/img/PDF/{$templateName}.png"));
|
copy(resource_path("/static/img/PDF/{$type}1.png"), resource_path("/static/img/PDF/{$templateName}.png"));
|
||||||
|
|
||||||
$path = resource_path("views/app/pdf/{$type}/{$templateName}.blade.php");
|
$path = resource_path("app/pdf/{$type}/{$templateName}.blade.php");
|
||||||
$type = ucfirst($type);
|
$type = ucfirst($type);
|
||||||
$this->info("{$type} Template created successfully at ".$path);
|
$this->info("{$type} Template created successfully at ".$path);
|
||||||
|
|
||||||
|
|||||||
@ -2,15 +2,14 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Crater\Http\Controllers\Controller;
|
||||||
use Crater\Models\Company;
|
use Crater\Models\Company;
|
||||||
use Crater\Models\Currency;
|
use Crater\Models\CompanySetting;
|
||||||
use Crater\Models\Customer;
|
use Crater\Models\Customer;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
use Crater\Http\Controllers\Controller;
|
use PDF;
|
||||||
|
|
||||||
class CustomerSalesReportController extends Controller
|
class CustomerSalesReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -57,7 +56,6 @@ class CustomerSalesReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -82,7 +80,6 @@ class CustomerSalesReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$pdf = PDF::loadView('app.pdf.reports.sales-customers');
|
$pdf = PDF::loadView('app.pdf.reports.sales-customers');
|
||||||
|
|||||||
@ -2,15 +2,14 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Crater\Models\Company;
|
|
||||||
use Crater\Models\Expense;
|
|
||||||
use Crater\Models\Currency;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
|
||||||
use Crater\Http\Controllers\Controller;
|
use Crater\Http\Controllers\Controller;
|
||||||
|
use Crater\Models\Company;
|
||||||
|
use Crater\Models\CompanySetting;
|
||||||
|
use Crater\Models\Expense;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
use PDF;
|
||||||
|
|
||||||
class ExpensesReportController extends Controller
|
class ExpensesReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -44,7 +43,6 @@ class ExpensesReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -68,7 +66,6 @@ class ExpensesReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
$pdf = PDF::loadView('app.pdf.reports.expenses');
|
$pdf = PDF::loadView('app.pdf.reports.expenses');
|
||||||
|
|
||||||
|
|||||||
@ -2,15 +2,14 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Crater\Models\Company;
|
|
||||||
use Crater\Models\Currency;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Crater\Models\InvoiceItem;
|
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
|
||||||
use Crater\Http\Controllers\Controller;
|
use Crater\Http\Controllers\Controller;
|
||||||
|
use Crater\Models\Company;
|
||||||
|
use Crater\Models\CompanySetting;
|
||||||
|
use Crater\Models\InvoiceItem;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
use PDF;
|
||||||
|
|
||||||
class ItemSalesReportController extends Controller
|
class ItemSalesReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -44,7 +43,6 @@ class ItemSalesReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -68,7 +66,6 @@ class ItemSalesReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
$pdf = PDF::loadView('app.pdf.reports.sales-items');
|
$pdf = PDF::loadView('app.pdf.reports.sales-items');
|
||||||
|
|
||||||
|
|||||||
@ -2,16 +2,15 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Crater\Http\Controllers\Controller;
|
||||||
use Crater\Models\Company;
|
use Crater\Models\Company;
|
||||||
|
use Crater\Models\CompanySetting;
|
||||||
use Crater\Models\Expense;
|
use Crater\Models\Expense;
|
||||||
use Crater\Models\Payment;
|
use Crater\Models\Payment;
|
||||||
use Crater\Models\Currency;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
use Crater\Http\Controllers\Controller;
|
use PDF;
|
||||||
|
|
||||||
class ProfitLossReportController extends Controller
|
class ProfitLossReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -50,8 +49,6 @@ class ProfitLossReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -77,7 +74,6 @@ class ProfitLossReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
$pdf = PDF::loadView('app.pdf.reports.profit-loss');
|
$pdf = PDF::loadView('app.pdf.reports.profit-loss');
|
||||||
|
|
||||||
|
|||||||
@ -2,15 +2,14 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Crater\Models\Tax;
|
|
||||||
use Crater\Models\Company;
|
|
||||||
use Crater\Models\Currency;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
|
||||||
use Crater\Http\Controllers\Controller;
|
use Crater\Http\Controllers\Controller;
|
||||||
|
use Crater\Models\Company;
|
||||||
|
use Crater\Models\CompanySetting;
|
||||||
|
use Crater\Models\Tax;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
use PDF;
|
||||||
|
|
||||||
class TaxSummaryReportController extends Controller
|
class TaxSummaryReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -45,8 +44,6 @@ class TaxSummaryReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -71,7 +68,6 @@ class TaxSummaryReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$pdf = PDF::loadView('app.pdf.reports.tax-summary');
|
$pdf = PDF::loadView('app.pdf.reports.tax-summary');
|
||||||
|
|||||||
@ -81,10 +81,7 @@
|
|||||||
"config": {
|
"config": {
|
||||||
"optimize-autoloader": true,
|
"optimize-autoloader": true,
|
||||||
"preferred-install": "dist",
|
"preferred-install": "dist",
|
||||||
"sort-packages": true,
|
"sort-packages": true
|
||||||
"allow-plugins": {
|
|
||||||
"pestphp/pest-plugin": true
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"laravel": {
|
"laravel": {
|
||||||
|
|||||||
57
composer.lock
generated
57
composer.lock
generated
@ -1841,22 +1841,22 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/psr7",
|
"name": "guzzlehttp/psr7",
|
||||||
"version": "2.5.0",
|
"version": "2.3.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/psr7.git",
|
"url": "https://github.com/guzzle/psr7.git",
|
||||||
"reference": "b635f279edd83fc275f822a1188157ffea568ff6"
|
"reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
|
"url": "https://api.github.com/repos/guzzle/psr7/zipball/83260bb50b8fc753c72d14dc1621a2dac31877ee",
|
||||||
"reference": "b635f279edd83fc275f822a1188157ffea568ff6",
|
"reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2.5 || ^8.0",
|
"php": "^7.2.5 || ^8.0",
|
||||||
"psr/http-factory": "^1.0",
|
"psr/http-factory": "^1.0",
|
||||||
"psr/http-message": "^1.1 || ^2.0",
|
"psr/http-message": "^1.0",
|
||||||
"ralouphie/getallheaders": "^3.0"
|
"ralouphie/getallheaders": "^3.0"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
@ -1864,18 +1864,17 @@
|
|||||||
"psr/http-message-implementation": "1.0"
|
"psr/http-message-implementation": "1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"bamarni/composer-bin-plugin": "^1.8.1",
|
"bamarni/composer-bin-plugin": "^1.4.1",
|
||||||
"http-interop/http-factory-tests": "^0.9",
|
"http-interop/http-factory-tests": "^0.9",
|
||||||
"phpunit/phpunit": "^8.5.29 || ^9.5.23"
|
"phpunit/phpunit": "^8.5.8 || ^9.3.10"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"bamarni-bin": {
|
"branch-alias": {
|
||||||
"bin-links": true,
|
"dev-master": "2.3-dev"
|
||||||
"forward-command": false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -1937,7 +1936,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/guzzle/psr7/issues",
|
"issues": "https://github.com/guzzle/psr7/issues",
|
||||||
"source": "https://github.com/guzzle/psr7/tree/2.5.0"
|
"source": "https://github.com/guzzle/psr7/tree/2.3.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -1953,7 +1952,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-04-17T16:11:26+00:00"
|
"time": "2022-06-09T08:26:02+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hamcrest/hamcrest-php",
|
"name": "hamcrest/hamcrest-php",
|
||||||
@ -5216,21 +5215,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-factory",
|
"name": "psr/http-factory",
|
||||||
"version": "1.0.2",
|
"version": "1.0.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/http-factory.git",
|
"url": "https://github.com/php-fig/http-factory.git",
|
||||||
"reference": "e616d01114759c4c489f93b099585439f795fe35"
|
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
|
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
|
||||||
"reference": "e616d01114759c4c489f93b099585439f795fe35",
|
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.0.0",
|
"php": ">=7.0.0",
|
||||||
"psr/http-message": "^1.0 || ^2.0"
|
"psr/http-message": "^1.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
@ -5250,7 +5249,7 @@
|
|||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
"homepage": "https://www.php-fig.org/"
|
"homepage": "http://www.php-fig.org/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Common interfaces for PSR-7 HTTP message factories",
|
"description": "Common interfaces for PSR-7 HTTP message factories",
|
||||||
@ -5265,31 +5264,31 @@
|
|||||||
"response"
|
"response"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/http-factory/tree/1.0.2"
|
"source": "https://github.com/php-fig/http-factory/tree/master"
|
||||||
},
|
},
|
||||||
"time": "2023-04-10T20:10:41+00:00"
|
"time": "2019-04-30T12:38:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-message",
|
"name": "psr/http-message",
|
||||||
"version": "1.1",
|
"version": "1.0.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/http-message.git",
|
"url": "https://github.com/php-fig/http-message.git",
|
||||||
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
|
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||||
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2 || ^8.0"
|
"php": ">=5.3.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.1.x-dev"
|
"dev-master": "1.0.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -5318,9 +5317,9 @@
|
|||||||
"response"
|
"response"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/http-message/tree/1.1"
|
"source": "https://github.com/php-fig/http-message/tree/master"
|
||||||
},
|
},
|
||||||
"time": "2023-04-04T09:50:52+00:00"
|
"time": "2016-08-06T14:39:51+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/log",
|
||||||
@ -11857,5 +11856,5 @@
|
|||||||
"php": "^7.4 || ^8.0"
|
"php": "^7.4 || ^8.0"
|
||||||
},
|
},
|
||||||
"platform-dev": [],
|
"platform-dev": [],
|
||||||
"plugin-api-version": "2.3.0"
|
"plugin-api-version": "2.1.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,7 +71,6 @@ return [
|
|||||||
["code" => "cs", "name" => "Czech"],
|
["code" => "cs", "name" => "Czech"],
|
||||||
["code" => "el", "name" => "Greek"],
|
["code" => "el", "name" => "Greek"],
|
||||||
["code" => "hr", "name" => "Crotian"],
|
["code" => "hr", "name" => "Crotian"],
|
||||||
["code" => "th", "name" => "ไทย"],
|
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -27,7 +27,6 @@ return [
|
|||||||
'tokenizer',
|
'tokenizer',
|
||||||
'JSON',
|
'JSON',
|
||||||
'cURL',
|
'cURL',
|
||||||
'zip',
|
|
||||||
],
|
],
|
||||||
'apache' => [
|
'apache' => [
|
||||||
'mod_rewrite',
|
'mod_rewrite',
|
||||||
|
|||||||
@ -170,7 +170,7 @@ class CountriesTableSeeder extends Seeder
|
|||||||
['id' => 152,'code' => 'NR','name' => "Nauru",'phonecode' => 674],
|
['id' => 152,'code' => 'NR','name' => "Nauru",'phonecode' => 674],
|
||||||
['id' => 153,'code' => 'NP','name' => "Nepal",'phonecode' => 977],
|
['id' => 153,'code' => 'NP','name' => "Nepal",'phonecode' => 977],
|
||||||
['id' => 154,'code' => 'AN','name' => "Netherlands Antilles",'phonecode' => 599],
|
['id' => 154,'code' => 'AN','name' => "Netherlands Antilles",'phonecode' => 599],
|
||||||
['id' => 155,'code' => 'NL','name' => "Netherlands",'phonecode' => 31],
|
['id' => 155,'code' => 'NL','name' => "Netherlands The",'phonecode' => 31],
|
||||||
['id' => 156,'code' => 'NC','name' => "New Caledonia",'phonecode' => 687],
|
['id' => 156,'code' => 'NC','name' => "New Caledonia",'phonecode' => 687],
|
||||||
['id' => 157,'code' => 'NZ','name' => "New Zealand",'phonecode' => 64],
|
['id' => 157,'code' => 'NZ','name' => "New Zealand",'phonecode' => 64],
|
||||||
['id' => 158,'code' => 'NI','name' => "Nicaragua",'phonecode' => 505],
|
['id' => 158,'code' => 'NI','name' => "Nicaragua",'phonecode' => 505],
|
||||||
|
|||||||
@ -143,7 +143,7 @@
|
|||||||
<template #activator>
|
<template #activator>
|
||||||
<img
|
<img
|
||||||
:src="previewAvatar"
|
:src="previewAvatar"
|
||||||
class="block w-8 h-8 rounded md:h-9 md:w-9 object-cover"
|
class="block w-8 h-8 rounded md:h-9 md:w-9"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,6 @@ import sk from './sk.json'
|
|||||||
import vi from './vi.json'
|
import vi from './vi.json'
|
||||||
import el from './el.json'
|
import el from './el.json'
|
||||||
import hr from './hr.json'
|
import hr from './hr.json'
|
||||||
import th from './th.json'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
cs,
|
cs,
|
||||||
@ -38,6 +37,5 @@ export default {
|
|||||||
vi,
|
vi,
|
||||||
pl,
|
pl,
|
||||||
el,
|
el,
|
||||||
hr,
|
hr
|
||||||
th
|
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -386,10 +386,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@ -408,10 +408,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@ -346,10 +346,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@ -327,10 +327,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@ -377,10 +377,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>@lang('pdf_invoice_label') - {{ $invoice->invoice_number }}</title>
|
<title>@lang('pdf_invoice_label') - {{$invoice->invoice_number}}</title>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
@ -304,12 +304,7 @@
|
|||||||
.pl-0 {
|
.pl-0 {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -317,10 +312,10 @@
|
|||||||
<table width="100%">
|
<table width="100%">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="50%" class="header-section-left">
|
<td width="50%" class="header-section-left">
|
||||||
@if ($logo)
|
@if($logo)
|
||||||
<img class="header-logo" style="height: 50px;" src="{{ $logo }}" alt="Company Logo">
|
<img class="header-logo" style="height: 50px;" src="{{ $logo }}" alt="Company Logo">
|
||||||
@else
|
@else
|
||||||
<h1 class="header-logo"> {{ $invoice->customer->company->name }} </h1>
|
<h1 class="header-logo"> {{$invoice->customer->company->name}} </h1>
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td width="50%" class="text-right company-address-container company-address">
|
<td width="50%" class="text-right company-address-container company-address">
|
||||||
@ -336,14 +331,14 @@
|
|||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<div class="customer-address-container">
|
<div class="customer-address-container">
|
||||||
<div class="billing-address-container billing-address">
|
<div class="billing-address-container billing-address">
|
||||||
@if ($billing_address)
|
@if($billing_address)
|
||||||
<b>@lang('pdf_bill_to')</b> <br>
|
<b>@lang('pdf_bill_to')</b> <br>
|
||||||
{!! $billing_address !!}
|
{!! $billing_address !!}
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div @if ($billing_address !== '</br>') class="shipping-address-container shipping-address" @else class="shipping-address-container--left shipping-address" @endif>
|
<div @if($billing_address !== '</br>') class="shipping-address-container shipping-address" @else class="shipping-address-container--left shipping-address" @endif>
|
||||||
@if ($shipping_address)
|
@if($shipping_address)
|
||||||
<b>@lang('pdf_ship_to')</b> <br>
|
<b>@lang('pdf_ship_to')</b> <br>
|
||||||
{!! $shipping_address !!}
|
{!! $shipping_address !!}
|
||||||
@endif
|
@endif
|
||||||
@ -355,15 +350,15 @@
|
|||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="attribute-label">@lang('pdf_invoice_number')</td>
|
<td class="attribute-label">@lang('pdf_invoice_number')</td>
|
||||||
<td class="attribute-value"> {{ $invoice->invoice_number }}</td>
|
<td class="attribute-value"> {{$invoice->invoice_number}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="attribute-label">@lang('pdf_invoice_date')</td>
|
<td class="attribute-label">@lang('pdf_invoice_date')</td>
|
||||||
<td class="attribute-value"> {{ $invoice->formattedInvoiceDate }}</td>
|
<td class="attribute-value"> {{$invoice->formattedInvoiceDate}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="attribute-label">@lang('pdf_invoice_due_date')</td>
|
<td class="attribute-label">@lang('pdf_invoice_due_date')</td>
|
||||||
<td class="attribute-value"> {{ $invoice->formattedDueDate }}</td>
|
<td class="attribute-value"> {{$invoice->formattedDueDate}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@ -373,7 +368,7 @@
|
|||||||
@include('app.pdf.invoice.partials.table')
|
@include('app.pdf.invoice.partials.table')
|
||||||
|
|
||||||
<div class="notes">
|
<div class="notes">
|
||||||
@if ($notes)
|
@if($notes)
|
||||||
<div class="notes-label">
|
<div class="notes-label">
|
||||||
@lang('pdf_notes')
|
@lang('pdf_notes')
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,34 +0,0 @@
|
|||||||
<style type="text/css">
|
|
||||||
@font-face {
|
|
||||||
font-family: 'THSarabunNew';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
src: url("{{ resource_path('static/fonts/THSarabunNew.ttf') }}") format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'THSarabunNew';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: bold;
|
|
||||||
src: url("{{ resource_path('static/fonts/THSarabunNew-Bold.ttf') }}") format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'THSarabunNew';
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: normal;
|
|
||||||
src: url("{{ resource_path('static/fonts/THSarabunNew-Italic.ttf') }}") format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'THSarabunNew';
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: bold;
|
|
||||||
src: url("{{ resource_path('static/fonts/THSarabunNew-BoldItalic.ttf') }}") format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
font-family: "THSarabunNew", sans-serif !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
@ -276,10 +276,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>@lang('pdf_expense_report_label')</title>
|
<title>@lang('pdf_expense_report_label')</title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
@ -12,7 +11,7 @@
|
|||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-container {
|
.sub-container{
|
||||||
padding: 0px 20px;
|
padding: 0px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,12 +133,7 @@
|
|||||||
color: #5851D8;
|
color: #5851D8;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="sub-container">
|
<div class="sub-container">
|
||||||
<table class="report-header">
|
<table class="report-header">
|
||||||
@ -169,7 +163,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="expense-amount">
|
<p class="expense-amount">
|
||||||
{!! format_money_pdf($expenseCategory->total_amount, $currency) !!}
|
{!! format_money_pdf($expenseCategory->total_amount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -181,7 +175,7 @@
|
|||||||
<table class="expense-total-table">
|
<table class="expense-total-table">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="expense-total-cell">
|
<td class="expense-total-cell">
|
||||||
<p class="expense-total">{!! format_money_pdf($totalExpense, $currency) !!}</p>
|
<p class="expense-total">{!! format_money_pdf($totalExpense) !!}</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@ -191,10 +185,9 @@
|
|||||||
<p class="report-footer-label">@lang('pdf_total_expenses_label')</p>
|
<p class="report-footer-label">@lang('pdf_total_expenses_label')</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="report-footer-value">{!! format_money_pdf($totalExpense, $currency) !!}</p>
|
<p class="report-footer-value">{!! format_money_pdf($totalExpense) !!}</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@ -1,6 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>@lang('pdf_profit_loss_label')</title>
|
<title>@lang('pdf_profit_loss_label')</title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
@ -12,7 +11,7 @@
|
|||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-container {
|
.sub-container{
|
||||||
padding: 0px 20px;
|
padding: 0px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,12 +158,7 @@
|
|||||||
color: #5851D8;
|
color: #5851D8;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="sub-container">
|
<div class="sub-container">
|
||||||
<table class="report-header">
|
<table class="report-header">
|
||||||
@ -189,7 +183,7 @@
|
|||||||
<p class="income-title">@lang("pdf_income_label")</p>
|
<p class="income-title">@lang("pdf_income_label")</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="income-amount">{!! format_money_pdf($income, $currency) !!}</p>
|
<p class="income-amount">{!! format_money_pdf($income) !!}</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@ -205,7 +199,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="expense-amount">
|
<p class="expense-amount">
|
||||||
{!! format_money_pdf($expenseCategory->total_amount, $currency) !!}
|
{!! format_money_pdf($expenseCategory->total_amount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -218,7 +212,7 @@
|
|||||||
<table class="expense-total-indicator-table">
|
<table class="expense-total-indicator-table">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="expense-total-cell">
|
<td class="expense-total-cell">
|
||||||
<p class="expense-total">{!! format_money_pdf($totalExpense, $currency) !!}</p>
|
<p class="expense-total">{!! format_money_pdf($totalExpense) !!}</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@ -228,10 +222,9 @@
|
|||||||
<p class="report-footer-label">@lang("pdf_net_profit_label")</p>
|
<p class="report-footer-label">@lang("pdf_net_profit_label")</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="report-footer-value">{!! format_money_pdf($income - $totalExpense, $currency) !!}</p>
|
<p class="report-footer-value">{!! format_money_pdf(($income-$totalExpense)) !!}</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@ -1,6 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>@lang('pdf_sales_customers_label')</title>
|
<title>@lang('pdf_sales_customers_label')</title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
@ -12,7 +11,7 @@
|
|||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-container {
|
.sub-container{
|
||||||
padding: 0px 20px;
|
padding: 0px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,17 +132,11 @@
|
|||||||
line-height: 21px;
|
line-height: 21px;
|
||||||
color: #5851D8;
|
color: #5851D8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-center {
|
.text-center {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="sub-container">
|
<div class="sub-container">
|
||||||
<table class="report-header">
|
<table class="report-header">
|
||||||
@ -175,7 +168,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="sales-amount">
|
<p class="sales-amount">
|
||||||
{!! format_money_pdf($invoice->base_total, $currency) !!}
|
{!! format_money_pdf($invoice->base_total) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -186,7 +179,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="sales-total-cell">
|
<td class="sales-total-cell">
|
||||||
<p class="sales-total-amount">
|
<p class="sales-total-amount">
|
||||||
{!! format_money_pdf($customer->totalAmount, $currency) !!}
|
{!! format_money_pdf($customer->totalAmount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -202,11 +195,10 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="report-footer-value">
|
<p class="report-footer-value">
|
||||||
{!! format_money_pdf($totalAmount, $currency) !!}
|
{!! format_money_pdf($totalAmount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@ -1,6 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>@lang('pdf_sales_items_label')</title>
|
<title>@lang('pdf_sales_items_label')</title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
@ -12,7 +11,7 @@
|
|||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-container {
|
.sub-container{
|
||||||
padding: 0px 20px;
|
padding: 0px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,17 +132,11 @@
|
|||||||
line-height: 21px;
|
line-height: 21px;
|
||||||
color: #5851D8;
|
color: #5851D8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-center {
|
.text-center {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="sub-container">
|
<div class="sub-container">
|
||||||
<table class="report-header">
|
<table class="report-header">
|
||||||
@ -174,7 +167,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="item-sales-amount">
|
<p class="item-sales-amount">
|
||||||
{!! format_money_pdf($item->total_amount, $currency) !!}
|
{!! format_money_pdf($item->total_amount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -186,7 +179,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="sales-total-cell">
|
<td class="sales-total-cell">
|
||||||
<p class="sales-total-amount">
|
<p class="sales-total-amount">
|
||||||
{!! format_money_pdf($totalAmount, $currency) !!}
|
{!! format_money_pdf($totalAmount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -201,11 +194,10 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="report-footer-value">
|
<p class="report-footer-value">
|
||||||
{!! format_money_pdf($totalAmount, $currency) !!}
|
{!! format_money_pdf($totalAmount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@ -1,6 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>@lang('pdf_tax_summery_label')</title>
|
<title>@lang('pdf_tax_summery_label')</title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
@ -12,7 +11,7 @@
|
|||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-container {
|
.sub-container{
|
||||||
padding: 0px 20px;
|
padding: 0px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,12 +134,7 @@
|
|||||||
color: #5851D8;
|
color: #5851D8;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@if (App::isLocale('th'))
|
|
||||||
@include('app.pdf.locale.th')
|
|
||||||
@endif
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="sub-container">
|
<div class="sub-container">
|
||||||
<table class="report-header">
|
<table class="report-header">
|
||||||
@ -174,7 +168,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="tax-amount">
|
<p class="tax-amount">
|
||||||
{!! format_money_pdf($tax->total_tax_amount, $currency) !!}
|
{!! format_money_pdf($tax->total_tax_amount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -188,7 +182,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="tax-total-cell">
|
<td class="tax-total-cell">
|
||||||
<p class="tax-total">
|
<p class="tax-total">
|
||||||
{!! format_money_pdf($totalTaxAmount, $currency) !!}
|
{!! format_money_pdf($totalTaxAmount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -200,11 +194,10 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="report-footer-value">
|
<p class="report-footer-value">
|
||||||
{!! format_money_pdf($totalTaxAmount, $currency) !!}
|
{!! format_money_pdf($totalTaxAmount) !!}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@ -1,40 +0,0 @@
|
|||||||
APP_ENV=production
|
|
||||||
APP_KEY=base64:kgk/4DW1vEVy7aEvet5FPp5un6PIGe/so8H0mvoUtW0=
|
|
||||||
APP_DEBUG=true
|
|
||||||
APP_LOG_LEVEL=debug
|
|
||||||
APP_URL=http://crater.test
|
|
||||||
|
|
||||||
DB_CONNECTION=mysql
|
|
||||||
DB_HOST=127.0.0.1
|
|
||||||
DB_PORT=3306
|
|
||||||
DB_DATABASE=crater
|
|
||||||
DB_USERNAME=crater
|
|
||||||
DB_PASSWORD=crater
|
|
||||||
|
|
||||||
BROADCAST_DRIVER=log
|
|
||||||
CACHE_DRIVER=file
|
|
||||||
QUEUE_DRIVER=sync
|
|
||||||
SESSION_DRIVER=cookie
|
|
||||||
SESSION_LIFETIME=1440
|
|
||||||
|
|
||||||
REDIS_HOST=127.0.0.1
|
|
||||||
REDIS_PASSWORD=null
|
|
||||||
REDIS_PORT=6379
|
|
||||||
|
|
||||||
MAIL_DRIVER=smtp
|
|
||||||
MAIL_HOST=
|
|
||||||
MAIL_PORT=
|
|
||||||
MAIL_USERNAME=
|
|
||||||
MAIL_PASSWORD=
|
|
||||||
MAIL_ENCRYPTION=
|
|
||||||
|
|
||||||
PUSHER_APP_ID=
|
|
||||||
PUSHER_KEY=
|
|
||||||
PUSHER_SECRET=
|
|
||||||
|
|
||||||
SANCTUM_STATEFUL_DOMAINS=crater.test
|
|
||||||
SESSION_DOMAIN=crater.test
|
|
||||||
|
|
||||||
TRUSTED_PROXIES="*"
|
|
||||||
|
|
||||||
CRON_JOB_AUTH_TOKEN=""
|
|
||||||
@ -1,64 +0,0 @@
|
|||||||
FROM php:8.1-fpm
|
|
||||||
|
|
||||||
# Install system dependencies
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
git \
|
|
||||||
curl \
|
|
||||||
libpng-dev \
|
|
||||||
libonig-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
zip \
|
|
||||||
unzip \
|
|
||||||
libzip-dev \
|
|
||||||
libmagickwand-dev \
|
|
||||||
mariadb-client \
|
|
||||||
npm
|
|
||||||
|
|
||||||
# Clear cache
|
|
||||||
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN pecl install imagick \
|
|
||||||
&& docker-php-ext-enable imagick
|
|
||||||
|
|
||||||
# Install PHP extensions
|
|
||||||
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd
|
|
||||||
|
|
||||||
# Get latest Composer
|
|
||||||
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
|
||||||
|
|
||||||
# Create system user to run Composer and Artisan Commands
|
|
||||||
RUN useradd -G www-data,root -u 1000 -d /home/crater-user crater-user
|
|
||||||
RUN mkdir -p /home/crater-user/.composer && \
|
|
||||||
chown -R crater-user:crater-user /home/crater-user
|
|
||||||
|
|
||||||
# Mounted volumes
|
|
||||||
COPY ./ /var/www
|
|
||||||
COPY ./docker-compose/php/uploads.ini /usr/local/etc/php/conf.d/uploads.ini
|
|
||||||
COPY ./uffizzi/.env.example /var/www/.env
|
|
||||||
|
|
||||||
# Set working directory
|
|
||||||
WORKDIR /var/www
|
|
||||||
|
|
||||||
RUN chown -R crater-user:crater-user ./
|
|
||||||
RUN chmod -R 775 composer.json composer.lock \
|
|
||||||
composer.lock storage/framework/ \
|
|
||||||
storage/logs/ bootstrap/cache/ /home/crater-user/.composer
|
|
||||||
RUN chown -R $(whoami):$(whoami) /var/log/
|
|
||||||
RUN chmod -R 775 /var/log
|
|
||||||
|
|
||||||
# Cleanup manually generated build files
|
|
||||||
RUN rm -rf /var/www/public/build
|
|
||||||
RUN npm config set user 0
|
|
||||||
RUN npm config set unsafe-perm true
|
|
||||||
# Frontend bulding
|
|
||||||
RUN sed -i 's/DB_CONNECTION=mysql/DB_CONNECTION=sqlite/g' /var/www/.env
|
|
||||||
RUN sed -i 's/DB_DATABASE=crater/DB_DATABASE=\/tmp\/crater.sqlite/g' /var/www/.env
|
|
||||||
RUN touch /tmp/crater.sqlite
|
|
||||||
RUN composer install --no-interaction --prefer-dist
|
|
||||||
RUN npm i -f
|
|
||||||
RUN npm install --save-dev sass
|
|
||||||
RUN export NODE_OPTIONS="--max-old-space-size=4096" && /usr/bin/npx vite build --target=es2020
|
|
||||||
RUN sed -i 's/DB_CONNECTION=sqlite/DB_CONNECTION=mysql/g' /var/www/.env
|
|
||||||
RUN sed -i 's/DB_DATABASE=\/tmp\/crater.sqlite/DB_DATABASE=crater/g' /var/www/.env
|
|
||||||
|
|
||||||
USER crater-user
|
|
||||||
@ -1,68 +0,0 @@
|
|||||||
FROM php:8.1-fpm as build
|
|
||||||
|
|
||||||
# Install system dependencies
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
git \
|
|
||||||
curl \
|
|
||||||
libpng-dev \
|
|
||||||
libonig-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
zip \
|
|
||||||
unzip \
|
|
||||||
libzip-dev \
|
|
||||||
libmagickwand-dev \
|
|
||||||
mariadb-client
|
|
||||||
|
|
||||||
# Clear cache
|
|
||||||
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN pecl install imagick \
|
|
||||||
&& docker-php-ext-enable imagick
|
|
||||||
|
|
||||||
# Install PHP extensions
|
|
||||||
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd
|
|
||||||
|
|
||||||
# Get latest Composer
|
|
||||||
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
|
||||||
|
|
||||||
# Create system user to run Composer and Artisan Commands
|
|
||||||
RUN useradd -G www-data,root -u 1000 -d /home/crater-user crater-user
|
|
||||||
RUN mkdir -p /home/crater-user/.composer && \
|
|
||||||
chown -R crater-user:crater-user /home/crater-user
|
|
||||||
|
|
||||||
# Mounted volumes
|
|
||||||
COPY ./ /var/www
|
|
||||||
COPY ./docker-compose/php/uploads.ini /usr/local/etc/php/conf.d/uploads.ini
|
|
||||||
COPY ./uffizzi/.env.example /var/www/.env
|
|
||||||
|
|
||||||
# Set working directory
|
|
||||||
WORKDIR /var/www
|
|
||||||
|
|
||||||
RUN chown -R crater-user:crater-user ./
|
|
||||||
RUN chmod -R 775 composer.json composer.lock \
|
|
||||||
composer.lock storage/framework/ \
|
|
||||||
storage/logs/ bootstrap/cache/ /home/crater-user/.composer
|
|
||||||
|
|
||||||
RUN composer config --no-plugins allow-plugins.pestphp/pest-plugin true && \
|
|
||||||
composer install --no-interaction --prefer-dist --optimize-autoloader && \
|
|
||||||
php artisan storage:link || true && \
|
|
||||||
php artisan key:generate
|
|
||||||
|
|
||||||
FROM php:8.0-fpm-alpine
|
|
||||||
|
|
||||||
RUN apk add --no-cache \
|
|
||||||
php8-bcmath
|
|
||||||
|
|
||||||
RUN docker-php-ext-install pdo pdo_mysql bcmath
|
|
||||||
|
|
||||||
COPY docker-compose/crontab /etc/crontabs/root
|
|
||||||
|
|
||||||
# Mounted volumes
|
|
||||||
COPY --from=build /var/www /var/www
|
|
||||||
|
|
||||||
RUN chown -R $(whoami):$(whoami) /var/www/
|
|
||||||
RUN chmod -R 775 /var/www/
|
|
||||||
RUN chown -R $(whoami):$(whoami) /var/log/
|
|
||||||
RUN chmod -R 775 /var/log/
|
|
||||||
|
|
||||||
CMD ["crond", "-f"]
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
version: '3'
|
|
||||||
|
|
||||||
x-uffizzi:
|
|
||||||
ingress:
|
|
||||||
service: nginx
|
|
||||||
port: 80
|
|
||||||
|
|
||||||
services:
|
|
||||||
app:
|
|
||||||
image: "${APP_IMAGE}"
|
|
||||||
restart: unless-stopped
|
|
||||||
working_dir: /var/www/
|
|
||||||
command: ["-c","
|
|
||||||
composer config --no-plugins allow-plugins.pestphp/pest-plugin true &&
|
|
||||||
composer install --no-interaction --prefer-dist --optimize-autoloader &&
|
|
||||||
php artisan storage:link || true &&
|
|
||||||
php artisan key:generate --force &&
|
|
||||||
php-fpm",
|
|
||||||
]
|
|
||||||
entrypoint: /bin/sh
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
deploy:
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
memory: 1000m
|
|
||||||
|
|
||||||
db:
|
|
||||||
image: mariadb
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
MYSQL_USER: crater
|
|
||||||
MYSQL_PASSWORD: crater
|
|
||||||
MYSQL_DATABASE: crater
|
|
||||||
MYSQL_ROOT_PASSWORD: crater
|
|
||||||
ports:
|
|
||||||
- '33006:3306'
|
|
||||||
deploy:
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
memory: 500m
|
|
||||||
|
|
||||||
nginx:
|
|
||||||
image: "${NGINX_IMAGE}"
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- 80:80
|
|
||||||
depends_on:
|
|
||||||
- app
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
memory: 500m
|
|
||||||
|
|
||||||
cron:
|
|
||||||
image: "${CROND_IMAGE}"
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
ARG BASE_IMAGE
|
|
||||||
|
|
||||||
FROM $BASE_IMAGE as build
|
|
||||||
FROM nginx:1.17-alpine
|
|
||||||
|
|
||||||
RUN rm /etc/nginx/conf.d/default.conf
|
|
||||||
|
|
||||||
COPY --from=build /var/www /var/www
|
|
||||||
COPY ./uffizzi/nginx/nginx /etc/nginx/conf.d/
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
server {
|
|
||||||
client_max_body_size 64M;
|
|
||||||
listen 80;
|
|
||||||
index index.php index.html;
|
|
||||||
error_log /var/log/nginx/error.log;
|
|
||||||
access_log /var/log/nginx/access.log;
|
|
||||||
root /var/www/public;
|
|
||||||
location ~ \.php$ {
|
|
||||||
try_files $uri =404;
|
|
||||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
|
||||||
fastcgi_pass localhost:9000;
|
|
||||||
fastcgi_index index.php;
|
|
||||||
include fastcgi_params;
|
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
||||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
|
||||||
fastcgi_read_timeout 300;
|
|
||||||
}
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/ /index.php?$query_string;
|
|
||||||
gzip_static on;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user