Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"extends": [ "plugin:@wordpress/eslint-plugin/recommended" ],
"globals" : {
"Invoice": "readonly",
"location": "readonly"
},
"settings": {
"react": {
"version": "18.3.1"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,6 @@ jobs:
restore-keys: |
node_modules-${{ runner.os }}-

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10

- name: nvm use ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
Expand Down
59 changes: 59 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Verify Coding Standards

on:
pull_request:
branches:
- main
- dev

jobs:
web-deploy:
name: 🎉 Verify Coding Standards
runs-on: ubuntu-latest
steps:
- name: 🚚 Get latest code
uses: actions/checkout@v3

- name: Cache Vendor
id: cache-vendor
uses: actions/cache@v3
env:
cache-name: cache-vendors
with:
path: vendor
key: vendor-${{ runner.os }}-${{ hashFiles('composer.lock') }}
restore-keys: |
vendor-${{ runner.os }}-

- name: Cache Node Modules
id: cache-node_modules
uses: actions/cache@v3
env:
cache-name: cache-node_modules
with:
path: node_modules
key: node_modules-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
node_modules-${{ runner.os }}-

- name: Composer Install
run: composer install
if: steps.cache-vendor.outputs.cache-hit != 'true'

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10

- name: nvm use ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'

- name: pnpm install
run: pnpm install
if: steps.cache-node_modules.outputs.cache-hit != 'true'

- name: lint
run: pnpm lint
8 changes: 8 additions & 0 deletions app/Features/Invoice.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

namespace Invoice\Features;

trait Invoice
{
public function get_invoice($invoice_id): \WP_Post {}
}
72 changes: 72 additions & 0 deletions app/Features/Post.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

namespace Invoice\Features;

trait Post
{
public function get_statuses_array(): array
{
return [
'draft' => [
'label' => _x('Draft', 'invoice post status'),
'public' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'date_floating' => true,
'label_count' => _n_noop(
'Draft <span class="count">(%s)</span>',
'Drafts <span class="count">(%s)</span>',
),
],
'invoice_issued' => [
'label' => _x('Issued', 'invoice post status'),
'public' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'date_floating' => true,
'label_count' => _n_noop(
'Issued <span class="count">(%s)</span>',
'Issued <span class="count">(%s)</span>',
),
],
'invoice_sent' => [
'label' => _x('Sent', 'invoice post status'),
'public' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'date_floating' => true,
'label_count' => _n_noop('Sent <span class="count">(%s)</span>', 'Sent <span class="count">(%s)</span>'),
],
'invoice_expired' => [
'label' => _x('Expired', 'invoice post status'),
'public' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'date_floating' => true,
'label_count' => _n_noop(
'Expired <span class="count">(%s)</span>',
'Expired <span class="count">(%s)</span>',
),
],
'invoice_paid' => [
'label' => _x('Paid', 'invoice post status'),
'public' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'date_floating' => true,
'label_count' => _n_noop('Paid <span class="count">(%s)</span>', 'Paid <span class="count">(%s)</span>'),
],
'invoice_cancelled' => [
'label' => _x('Cancelled', 'invoice post status'),
'public' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'date_floating' => true,
'label_count' => _n_noop(
'Cancelled <span class="count">(%s)</span>',
'Cancelled <span class="count">(%s)</span>',
),
],
];
}
}
68 changes: 68 additions & 0 deletions app/Features/Schema.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<?php

namespace Invoice\Features;

trait Schema
{
use Settings;

public function schema($invoice_id, $public = false): array
{
$stored_invoice_series_number = get_field('invoice_series_number', $invoice_id);
$stored_invoice_number = get_field('invoice_number', $invoice_id);
$invoice_number = '';
if ($stored_invoice_series_number) {
$invoice_number = "{$stored_invoice_number}-";
}
$invoice_number .= $stored_invoice_number;
$invoice_number = $stored_invoice_number === 99999 ? null : $invoice_number;
$uuid = get_post_meta($invoice_id, 'uuid', true);
$invoice_view_url = "/invoices/view/{$uuid}";
$invoice_edit_url = "/invoices/edit/{$uuid}";

$private_data = [
'invoice_client' => get_field('invoice_client', $invoice_id, false),
'invoice_client_address' => get_field('invoice_client_address', $invoice_id, false),
'invoice_view_url' => $invoice_view_url,
'invoice_edit_url' => $invoice_edit_url,
'invoice_notes' => get_field('invoice_notes', $invoice_id),
'invoice_terms' => get_field('invoice_terms', $invoice_id),
];

$public_data = [
'ID' => $invoice_id,
'UUID' => $uuid,
'invoice_series_number' => $stored_invoice_series_number,
'invoice_number' => $stored_invoice_number,
'generated_invoice_number' => $invoice_number,
'invoice_issue_date' => get_field(
'invoice_issue_date',
$invoice_id,
false,
),
'invoice_due_date' => get_field(
'invoice_due_date',
$invoice_id,
false,
),
'invoice_sender' => get_field('invoice_sender', $invoice_id, false),
'invoice_sender_address' => get_field('invoice_sender_address', $invoice_id, false),
'invoice_currency' => get_field('invoice_currency', $invoice_id, false),
'invoice_items' => get_field('invoice_items', $invoice_id),
'invoice_status' => get_post_status($invoice_id),
'invoice_tax_amount' => get_field('invoice_tax_amount', $invoice_id),
'invoice_taxes' => get_field('invoice_taxes', $invoice_id),
'invoice_discount_amount' => get_field('invoice_discount_amount', $invoice_id),
'invoice_discounts' => get_field('invoice_discounts', $invoice_id),
'invoice_subtotal' => get_field('invoice_subtotal', $invoice_id),
'invoice_tax_subtotal' => get_field('invoice_tax_subtotal', $invoice_id),
'invoice_taxes_total' => get_field('invoice_taxes_total', $invoice_id),
'invoice_discount_subtotal' => get_field('invoice_discount_subtotal', $invoice_id),
'invoice_discount_total' => get_field('invoice_discount_total', $invoice_id),
'invoice_total' => get_field('invoice_total', $invoice_id),
'invoice_logo' => $this->get_logo($invoice_id),
];

return $public ? $public_data : array_merge($public_data, $private_data);
}
}
40 changes: 35 additions & 5 deletions app/Features/Settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,47 @@

namespace Invoice\Features;

class Settings {
public static function get_logo($invoice_id = null) : ?string {
if($invoice_id) {
trait Settings
{
public function get_logo($invoice_id = null): ?string
{
if ($invoice_id) {
$invoice_logo = get_field('invoice_logo', $invoice_id);
if($invoice_logo) {
if ($invoice_logo) {
return $invoice_logo;
}
}
$custom_logo_id = get_theme_mod('custom_logo');

return $custom_logo_id ?
wp_get_attachment_image_src($custom_logo_id, 'full', true)[0] :
null;
}
}

public function get_settings(): array
{
return [
'invoice_last_number' => get_option('invoice_last_number', 0),
'invoice_series' => get_option('invoice_series', []),
'invoice_date_format' => get_option('invoice_date_format', 'd/M/Y'),
'invoice_business_fni_country_code' => get_option('invoice_business_fni_country_code', 'ES'),
'invoice_business_fni' => get_option('invoice_business_fni', ''),
'invoice_business_name' => get_option('invoice_business_name', get_bloginfo()),
'invoice_business_country' => get_option('invoice_business_country', 'ES'),
'invoice_business_state' => get_option('invoice_business_state', ''),
'invoice_business_address' => get_option('invoice_business_address', ''),
'invoice_business_address_cont' => get_option('invoice_business_address_cont', ''),
'invoice_business_city' => get_option('invoice_business_city', ''),
'invoice_business_postal_code' => get_option('invoice_business_postal_code', ''),
'invoices_taxes' => get_option('invoice_taxes', []),
'invoice_discounts' => get_option('invoice_discounts', []),
'invoice_currency' => get_option('invoice_currency', 'EUR'),
'invoice_currency_symbol' => get_option('invoice_currency_symbol', '&euro;'),
'invoice_logo' => $this->get_logo(),
'spain_iva' => get_option('spain_iva'),
'spain_irpf' => get_option('spain_irpf'),
'selected_invoice_tax' => get_option('selected_invoice_tax', 21),
'selected_invoice_discount' => get_option('selected_invoice_discount'),
];
}
}
24 changes: 9 additions & 15 deletions app/Hooks/Blocks.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,22 @@

namespace Invoice\Hooks;

class Blocks {
public static function init() : void {
add_action('init', self::register_block_types(...));
}
class Blocks
{
public function init(): void
{
add_action('init', [$this, 'register_block_types']);
}

public static function register_block_types(): void
public function register_block_types(): void
{
$block_types = glob(APP_INVOICE_DIR . '/blocks/*');
if (count($block_types) > 0) {
foreach ($block_types as $block) {
if (is_dir($block)) {
$block_data = register_block_type($block);

add_filter(
'allowed_block_types_all',
function ($allowed_blocks) use ($block_data) {
if (!is_array($allowed_blocks)) return $allowed_blocks;
$allowed_blocks[] = $block_data->name;
return $allowed_blocks;
}, 99, 2);
register_block_type($block);
}
}
}
}
}
}
35 changes: 19 additions & 16 deletions app/Hooks/Gutenberg.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,23 @@

namespace Invoice\Hooks;

class Gutenberg {
public static function init() : void {
add_filter('block_categories_all', self::block_categories_all(...), 10, 2);
}
class Gutenberg
{
public function init(): void
{
add_filter('block_categories_all', [$this, 'block_categories_all'], 10, 2);
}

public static function block_categories_all(array $categories, $post) : array {
return array_merge(
$categories,
array (
array(
'slug' => 'invoice',
'title' => __( 'Invoice' ),
),
),
);
}
}
public function block_categories_all(array $categories, $post): array
{
return array_merge(
$categories,
[
[
'slug' => 'invoice',
'title' => __('Invoice'),
],
],
);
}
}
Loading