Plugin Directory

Changeset 3251553


Ignore:
Timestamp:
03/06/2025 09:00:32 AM (9 months ago)
Author:
them.es
Message:

updated trunk

Location:
billy
Files:
1259 added
1 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • billy/trunk/README.md

    r3111046 r3251553  
    8787    -   [mPDF](https://github.com/mpdf/mpdf), [GPLv2](https://github.com/mpdf/mpdf/blob/development/LICENSE.txt)
    8888    -   [Roboto Font](https://fonts.google.com/specimen/Roboto), [Apache License v2](http://www.apache.org/licenses/LICENSE-2.0)
     89-   [Strauss](https://github.com/BrianHenryIE/strauss), [MIT](https://github.com/BrianHenryIE/strauss/blob/master/LICENSE)
    8990
    9091## Copyright & License
  • billy/trunk/billy.php

    r3247811 r3251553  
    44 * Plugin URI: https://wordpress.org/plugins/billy
    55 * Description: A business-oriented billing suite powered by WordPress.
    6  * Version: 1.10.4
     6 * Version: 1.10.5
    77 * Author: them.es
    88 * Author URI: https://them.es/plugins/billy
  • billy/trunk/inc/class-pdfexport.php

    r3247591 r3251553  
    44 * https://mpdf.github.io
    55 */
    6 require __DIR__ . '/../vendor/autoload.php';
    7 
    8 use Mpdf\Mpdf;
    9 use Mpdf\WatermarkText;
     6require __DIR__ . '/../vendor-prefixed/autoload.php';
     7
     8use Billy\Mpdf\Mpdf;
     9use Billy\Mpdf\WatermarkText;
     10use Billy\Mpdf\HTMLParserMode;
    1011
    1112defined( 'ABSPATH' ) || exit;
     
    136137        $parameters = $request->get_params();
    137138
    138         $post_id   = (int) $parameters['id']; // Invoice/Quote.
    139         $post      = get_post( $post_id );
     139        $post_id = (int) $parameters['id']; // Invoice/Quote.
     140        $post    = get_post( $post_id );
     141
     142        if ( empty( $post_id ) || ! $post ) {
     143            return '404';
     144        }
     145
    140146        $post_type = $post->post_type;
    141147        $reference = $post->post_title;
     
    164170        }
    165171
    166         $mpdf->WriteHTML( $css, \Mpdf\HTMLParserMode::HEADER_CSS );
     172        $mpdf->WriteHTML( $css, HTMLParserMode::HEADER_CSS );
     173
     174        $footer_ids = get_posts(
     175            array(
     176                'post_type'   => 'wp_block',
     177                'title'       => 'Billy Footer',
     178                'post_status' => array( 'publish', 'private' ),
     179                'fields'      => 'ids',
     180            )
     181        );
     182
     183        global $post;
     184        $post = get_post( $post_id );
     185        setup_postdata( $post );
     186
     187        if ( function_exists( 'pll_get_post_language' ) ) {
     188            switch_to_locale( pll_get_post_language( $post_id, 'locale' ) );
     189        }
    167190
    168191        $content = '';
    169         if ( ! empty( $post_id ) && get_post( $post_id ) ) {
    170             global $post;
    171             $post = get_post( $post_id );
    172 
    173             setup_postdata( $post );
    174 
    175             $footer_ids = get_posts(
    176                 array(
    177                     'post_type'   => 'wp_block',
    178                     'title'       => 'Billy Footer',
    179                     'post_status' => array( 'publish', 'private' ),
    180                     'fields'      => 'ids',
    181                 )
    182             );
    183 
    184             $blocks = parse_blocks( get_the_content() );
    185             foreach ( $blocks as $block ) {
    186                 // Exclude reusable Footer blocks.
    187                 if ( 'core/block' !== $block['blockName'] || ( 'core/block' === $block['blockName'] && ! in_array( $block['attrs']['ref'], $footer_ids, true ) ) ) {
    188                     $content .= render_block( $block );
     192        $blocks  = parse_blocks( get_the_content() );
     193        foreach ( $blocks as $block ) {
     194            // Exclude reusable Footer blocks.
     195            if ( 'core/block' !== $block['blockName'] || ( 'core/block' === $block['blockName'] && ! in_array( $block['attrs']['ref'], $footer_ids, true ) ) ) {
     196                $content .= apply_filters( 'the_content', render_block( $block ) );
     197            }
     198        }
     199
     200        // Remove line breaks from content.
     201        $content = preg_replace( '/\r|\n/', '', $content );
     202
     203        // Filterable content. @since 1.10.0!
     204        if ( is_readable( get_theme_file_path( 'templates/' . $post_type . '-pdf-content.html' ) ) ) {
     205            $content = file_get_contents( get_theme_file_path( 'templates/' . $post_type . '-pdf-content.html' ) );
     206        } elseif ( is_readable( get_theme_file_path( 'templates/billy-pdf-content.html' ) ) ) {
     207            $content = file_get_contents( get_theme_file_path( 'templates/billy-pdf-content.html' ) );
     208        } else {
     209            $content = apply_filters( 'billy_pdf_content', $content, $post_type );
     210        }
     211
     212        // [WORKAROUND] Replace hardcoded "EN" translation strings in table. [TODO] Refactor table block.
     213        $translation_placeholders       = array(
     214            'Description</th>',
     215            'Amount</th>',
     216            'Subtotal</th>',
     217            'Total</th>',
     218            'Tax</th>',
     219        );
     220        $translation_placeholder_values = array(
     221            __( 'Description', 'billy' ) . '</th>',
     222            __( 'Amount', 'billy' ) . '</th>',
     223            __( 'Subtotal', 'billy' ) . '</th>',
     224            __( 'Total', 'billy' ) . '</th>',
     225            __( 'Tax', 'billy' ) . '</th>',
     226        );
     227        $content                        = str_replace( $translation_placeholders, $translation_placeholder_values, $content );
     228
     229        // Replace dynamic value.
     230        $content_placeholders       = array(
     231            '{DATE}',
     232            '{EMAIL}',
     233            '{SITETITLE}',
     234            '{SITEICON}',
     235            '{CURRENTPAGE}',
     236            '{TOTALPAGES}',
     237            'class="has-text-align-center',
     238            'class="has-text-align-right',
     239            'class="has-text-align-left',
     240            '<p ',
     241            '</p>',
     242        );
     243        $content_placeholder_values = array(
     244            esc_html( get_the_date( '', $post_id ) ),
     245            esc_html( get_theme_mod( 'email', get_bloginfo( 'admin_email' ) ) ),
     246            esc_html( get_bloginfo( 'name' ) ),
     247            get_site_icon_url() ? '<img src="' . esc_url( get_site_icon_url() ) . '" height="70" />' : '',
     248            '{PAGENO}',
     249            '{nbpg}',
     250            'align="center" class="has-text-align-center',
     251            'align="right" class="has-text-align-right',
     252            'align="left" class="has-text-align-left',
     253            '<figure ',
     254            '</figure>',
     255        );
     256        $content                    = str_replace( $content_placeholders, $content_placeholder_values, $content );
     257
     258        // Workaround to fix mising display "flex" compatibility. Count inner "wp-block-column" blocks and add width to style attributes.
     259        $dom = new DOMDocument();
     260        libxml_use_internal_errors( true ); // Suppress warnings for invalid HTML.
     261        $dom->loadHTML( '<meta charset="UTF-8" />' . $content ); // Make sure the content will be UTF-8 formatted.
     262        libxml_clear_errors();
     263
     264        $xpath = new DOMXPath( $dom );
     265
     266        // Find all wp-block-columns elements.
     267        $columns = $xpath->query( '//div[contains(@class, "wp-block-columns")]' );
     268
     269        foreach ( $columns as $column ) {
     270            // Find all inner wp-block-column elements.
     271            $inner_columns = $xpath->query( './/div[contains(@class, "wp-block-column")]', $column );
     272            $count         = $inner_columns->length;
     273
     274            if ( $count > 0 ) {
     275                foreach ( $inner_columns as $inner_column ) {
     276                    $inner_column->setAttribute( 'style', 'width: ' . (int) ( 100 / $count ) . '%;' );
    189277                }
    190278            }
    191 
    192             // Remove line breaks from content.
    193             $content = preg_replace( '/\r|\n/', '', $content );
    194 
    195             // Filterable content. @since 1.10.0!
    196             if ( is_readable( get_theme_file_path( 'templates/' . $post_type . '-pdf-content.html' ) ) ) {
    197                 $content = file_get_contents( get_theme_file_path( 'templates/' . $post_type . '-pdf-content.html' ) );
    198             } elseif ( is_readable( get_theme_file_path( 'templates/billy-pdf-content.html' ) ) ) {
    199                 $content = file_get_contents( get_theme_file_path( 'templates/billy-pdf-content.html' ) );
    200             } else {
    201                 $content = apply_filters( 'billy_pdf_content', $content, $post_type );
    202             }
    203 
    204             $content_placeholders       = array(
    205                 '{DATE}',
    206                 '{EMAIL}',
    207                 '{SITETITLE}',
    208                 '{SITEICON}',
    209                 '{CURRENTPAGE}',
    210                 '{TOTALPAGES}',
    211                 'class="has-text-align-center',
    212                 'class="has-text-align-right',
    213                 'class="has-text-align-left',
    214                 '<p ',
    215                 '</p>',
    216             );
    217             $content_placeholder_values = array(
    218                 esc_html( get_the_date( '', $post_id ) ),
    219                 esc_html( get_theme_mod( 'email', get_bloginfo( 'admin_email' ) ) ),
    220                 esc_html( get_bloginfo( 'name' ) ),
    221                 get_site_icon_url() ? '<img src="' . esc_url( get_site_icon_url() ) . '" height="70" />' : '',
    222                 '{PAGENO}',
    223                 '{nbpg}',
    224                 'align="center" class="has-text-align-center',
    225                 'align="right" class="has-text-align-right',
    226                 'align="left" class="has-text-align-left',
    227                 '<figure ',
    228                 '</figure>',
    229             );
    230             $content                    = str_replace( $content_placeholders, $content_placeholder_values, $content );
    231 
    232             // Workaround to fix mising display "flex" compatibility. Count inner "wp-block-column" blocks and add width to style attributes.
    233             $dom = new DOMDocument();
    234             libxml_use_internal_errors( true ); // Suppress warnings for invalid HTML.
    235             $dom->loadHTML( '<meta charset="UTF-8" />' . $content ); // Make sure the content will be UTF-8 formatted.
    236             libxml_clear_errors();
    237 
    238             $xpath = new DOMXPath( $dom );
    239 
    240             // Find all wp-block-columns elements.
    241             $columns = $xpath->query( '//div[contains(@class, "wp-block-columns")]' );
    242 
    243             foreach ( $columns as $column ) {
    244                 // Find all inner wp-block-column elements.
    245                 $inner_columns = $xpath->query( './/div[contains(@class, "wp-block-column")]', $column );
    246                 $count         = $inner_columns->length;
    247 
    248                 if ( $count > 0 ) {
    249                     foreach ( $inner_columns as $inner_column ) {
    250                         $inner_column->setAttribute( 'style', 'width: ' . (int) ( 100 / $count ) . '%;' );
    251                     }
     279        }
     280
     281        $content = $dom->saveHTML();
     282
     283        wp_reset_postdata();
     284
     285        // PDF footer.
     286        if ( $footer_ids ) {
     287            $footer_content = get_post_field( 'post_content', $footer_ids[0] );
     288        } else {
     289            // Fallback.
     290            $footer_content = '<table class="footer" width="100%">
     291            <tr>
     292                <td width="33%"><small>' . esc_html( get_the_date( '', $post_id ) ) . '</small></td>
     293                <td width="33%" align="center"><small>{PAGENO}/{nbpg}</small></td>
     294                <td width="33%" align="right"><small>' . esc_html( $reference ) . '</small></td>
     295            </tr>
     296        </table>';
     297        }
     298
     299        // Filterable footer. @since 1.10.0!
     300        if ( is_readable( get_theme_file_path( 'templates/' . $post_type . '-pdf-footer.html' ) ) ) {
     301            $content = file_get_contents( get_theme_file_path( 'templates/' . $post_type . '-pdf-footer.html' ) );
     302        } elseif ( is_readable( get_theme_file_path( 'templates/billy-pdf-footer.html' ) ) ) {
     303            $footer_content = file_get_contents( get_theme_file_path( 'templates/billy-pdf-footer.html' ) );
     304        } else {
     305            $footer_content = apply_filters( 'billy_pdf_footer', $footer_content, $post_type );
     306        }
     307
     308        $footer_placeholders       = array(
     309            '{DATE}',
     310            '{EMAIL}',
     311            '{SITETITLE}',
     312            '{SITEICON}',
     313            '{CURRENTPAGE}',
     314            '{TOTALPAGES}',
     315            'class="has-text-align-center',
     316            'class="has-text-align-right',
     317            'class="has-text-align-left',
     318            '<p ',
     319            '</p>',
     320        );
     321        $footer_placeholder_values = array(
     322            esc_html( get_the_date( '', $post_id ) ),
     323            esc_html( get_theme_mod( 'email', get_bloginfo( 'admin_email' ) ) ),
     324            esc_html( get_bloginfo( 'name' ) ),
     325            get_site_icon_url() ? '<img src="' . esc_url( get_site_icon_url() ) . '" height="35" />' : '',
     326            '{PAGENO}',
     327            '{nbpg}',
     328            'align="center" class="has-text-align-center',
     329            'align="right" class="has-text-align-right',
     330            'align="left" class="has-text-align-left',
     331            '<figure ',
     332            '</figure>',
     333        );
     334        $footer_content            = str_replace( $footer_placeholders, $footer_placeholder_values, $footer_content );
     335
     336        // Workaround to fix mising display "flex" compatibility. Count inner "wp-block-column" blocks and add width to style attributes.
     337        $dom = new DOMDocument();
     338        libxml_use_internal_errors( true ); // Suppress warnings for invalid HTML.
     339        $dom->loadHTML( '<meta charset="UTF-8" />' . $footer_content ); // Make sure the content will be UTF-8 formatted.
     340        libxml_clear_errors();
     341
     342        $xpath = new DOMXPath( $dom );
     343
     344        // Find all wp-block-columns elements.
     345        $columns = $xpath->query( '//div[contains(@class, "wp-block-columns")]' );
     346
     347        foreach ( $columns as $column ) {
     348            // Find all inner wp-block-column elements.
     349            $inner_columns = $xpath->query( './/div[contains(@class, "wp-block-column")]', $column );
     350            $count         = $inner_columns->length;
     351
     352            if ( $count > 0 ) {
     353                foreach ( $inner_columns as $inner_column ) {
     354                    $inner_column->setAttribute( 'style', 'width: ' . (int) ( 100 / $count ) . '%;' );
    252355                }
    253356            }
    254 
    255             $content = $dom->saveHTML();
    256 
    257             wp_reset_postdata();
    258 
    259             // PDF footer.
    260             if ( $footer_ids ) {
    261                 $footer_content = get_post_field( 'post_content', $footer_ids[0] );
    262             } else {
    263                 // Fallback.
    264                 $footer_content = '<table class="footer" width="100%">
    265                 <tr>
    266                     <td width="33%"><small>' . esc_html( get_the_date( '', $post_id ) ) . '</small></td>
    267                     <td width="33%" align="center"><small>{PAGENO}/{nbpg}</small></td>
    268                     <td width="33%" align="right"><small>' . esc_html( $reference ) . '</small></td>
    269                 </tr>
    270             </table>';
    271             }
    272 
    273             // Filterable footer. @since 1.10.0!
    274             if ( is_readable( get_theme_file_path( 'templates/' . $post_type . '-pdf-footer.html' ) ) ) {
    275                 $content = file_get_contents( get_theme_file_path( 'templates/' . $post_type . '-pdf-footer.html' ) );
    276             } elseif ( is_readable( get_theme_file_path( 'templates/billy-pdf-footer.html' ) ) ) {
    277                 $footer_content = file_get_contents( get_theme_file_path( 'templates/billy-pdf-footer.html' ) );
    278             } else {
    279                 $footer_content = apply_filters( 'billy_pdf_footer', $footer_content, $post_type );
    280             }
    281 
    282             $footer_placeholders       = array(
    283                 '{DATE}',
    284                 '{EMAIL}',
    285                 '{SITETITLE}',
    286                 '{SITEICON}',
    287                 '{CURRENTPAGE}',
    288                 '{TOTALPAGES}',
    289                 'class="has-text-align-center',
    290                 'class="has-text-align-right',
    291                 'class="has-text-align-left',
    292                 '<p ',
    293                 '</p>',
    294             );
    295             $footer_placeholder_values = array(
    296                 esc_html( get_the_date( '', $post_id ) ),
    297                 esc_html( get_theme_mod( 'email', get_bloginfo( 'admin_email' ) ) ),
    298                 esc_html( get_bloginfo( 'name' ) ),
    299                 get_site_icon_url() ? '<img src="' . esc_url( get_site_icon_url() ) . '" height="35" />' : '',
    300                 '{PAGENO}',
    301                 '{nbpg}',
    302                 'align="center" class="has-text-align-center',
    303                 'align="right" class="has-text-align-right',
    304                 'align="left" class="has-text-align-left',
    305                 '<figure ',
    306                 '</figure>',
    307             );
    308             $footer_content            = str_replace( $footer_placeholders, $footer_placeholder_values, $footer_content );
    309 
    310             // Workaround to fix mising display "flex" compatibility. Count inner "wp-block-column" blocks and add width to style attributes.
    311             $dom = new DOMDocument();
    312             libxml_use_internal_errors( true ); // Suppress warnings for invalid HTML.
    313             $dom->loadHTML( '<meta charset="UTF-8" />' . $footer_content ); // Make sure the content will be UTF-8 formatted.
    314             libxml_clear_errors();
    315 
    316             $xpath = new DOMXPath( $dom );
    317 
    318             // Find all wp-block-columns elements.
    319             $columns = $xpath->query( '//div[contains(@class, "wp-block-columns")]' );
    320 
    321             foreach ( $columns as $column ) {
    322                 // Find all inner wp-block-column elements.
    323                 $inner_columns = $xpath->query( './/div[contains(@class, "wp-block-column")]', $column );
    324                 $count         = $inner_columns->length;
    325 
    326                 if ( $count > 0 ) {
    327                     foreach ( $inner_columns as $inner_column ) {
    328                         $inner_column->setAttribute( 'style', 'width: ' . (int) ( 100 / $count ) . '%;' );
    329                     }
    330                 }
    331             }
    332 
    333             $footer_content = $dom->saveHTML();
    334 
    335             $mpdf->SetHTMLFooter( do_blocks( $footer_content ) );
    336         }
     357        }
     358
     359        $footer_content = $dom->saveHTML();
     360
     361        $mpdf->SetHTMLFooter( do_blocks( $footer_content ) );
    337362
    338363        $write_html = '<html>
    339             <body class="' . esc_attr( $post_type ) . '-template-default single single-' . esc_attr( $post_type ) . ' singular"><div class="entry-content"><div id="' . esc_attr( $post_type ) . '" class="' . esc_attr( $post_type ) . '-wrapper">' . $content . '</div></div>
     364            <body class="' . esc_attr( $post_type ) . '-template-default single single-' . esc_attr( $post_type ) . ' singular">
     365            <div class="entry-content"><div id="' . esc_attr( $post_type ) . '" class="' . esc_attr( $post_type ) . '-wrapper">' . $content . '</div></div>
    340366            </body>
    341367        </html>';
    342368
    343369        $mpdf->SetTitle( esc_html( $reference ) );
    344         $mpdf->WriteHTML( $write_html, \Mpdf\HTMLParserMode::HTML_BODY );
     370        $mpdf->WriteHTML( $write_html, HTMLParserMode::HTML_BODY );
    345371        $file = esc_attr( $reference ) . '.pdf';
    346372
  • billy/trunk/languages/billy.pot

    r3174111 r3251553  
    1 # Copyright (C) 2024 them.es
     1# Copyright (C) 2025 them.es
    22# This file is distributed under the GPL-2.0+.
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Billy 1.9.4\n"
     5"Project-Id-Version: Billy 1.10.4\n"
    66"Report-Msgid-Bugs-To: https://github.com/them-es/billy/issues\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2024-10-01T13:15:11+00:00\n"
     12"POT-Creation-Date: 2025-03-05T12:49:05+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.11.0\n"
     
    5656msgstr ""
    5757
    58 #: inc/class-billy.php:166
    59 #: inc/class-billy.php:299
    60 #: inc/class-billy.php:314
     58#: inc/class-billy.php:168
     59#: inc/class-billy.php:321
     60#: inc/class-billy.php:342
    6161#: blocks/build/index.js:1
    6262#: blocks/src/accounting/table/deprecatedOuter.js:136
     
    8080#: blocks/src/accounting/table/deprecatedOuter.js:768
    8181#: blocks/src/accounting/table/deprecatedOuter.js:778
    82 #: blocks/src/accounting/table/index.js:191
    83 #: blocks/src/accounting/table/index.js:208
    84 #: blocks/src/accounting/table/index.js:226
    85 #: blocks/src/accounting/table/index.js:247
    86 #: blocks/src/accounting/table/index.js:262
    87 #: blocks/src/accounting/table/index.js:358
    88 #: blocks/src/accounting/table/index.js:368
    89 #: blocks/src/accounting/table/index.js:384
    90 #: blocks/src/accounting/table/index.js:407
    91 #: blocks/src/accounting/table/index.js:414
     82#: blocks/src/accounting/table/index.js:188
     83#: blocks/src/accounting/table/index.js:205
     84#: blocks/src/accounting/table/index.js:223
     85#: blocks/src/accounting/table/index.js:244
     86#: blocks/src/accounting/table/index.js:259
     87#: blocks/src/accounting/table/index.js:355
     88#: blocks/src/accounting/table/index.js:365
     89#: blocks/src/accounting/table/index.js:381
     90#: blocks/src/accounting/table/index.js:404
     91#: blocks/src/accounting/table/index.js:411
    9292#: blocks/src/invoice/table/deprecatedInner.js:79
    9393#: blocks/src/invoice/table/deprecatedInner.js:149
     
    9696#: blocks/src/invoice/table/deprecatedOuter.js:252
    9797#: blocks/src/invoice/table/deprecatedOuter.js:293
    98 #: blocks/src/invoice/table/index.js:213
    99 #: blocks/src/invoice/table/index.js:272
    100 #: blocks/src/invoice/table/index.js:336
    101 #: blocks/src/invoice/table/index.js:401
    102 #: blocks/src/invoice/table/index.js:676
     98#: blocks/src/invoice/table/index.js:212
     99#: blocks/src/invoice/table/index.js:271
     100#: blocks/src/invoice/table/index.js:335
     101#: blocks/src/invoice/table/index.js:400
     102#: blocks/src/invoice/table/index.js:675
    103103#: blocks/src/quote/table/deprecatedInner.js:79
    104104#: blocks/src/quote/table/deprecatedInner.js:149
     
    107107#: blocks/src/quote/table/deprecatedOuter.js:251
    108108#: blocks/src/quote/table/deprecatedOuter.js:292
    109 #: blocks/src/quote/table/index.js:212
    110 #: blocks/src/quote/table/index.js:271
    111 #: blocks/src/quote/table/index.js:335
    112 #: blocks/src/quote/table/index.js:400
    113 #: blocks/src/quote/table/index.js:675
     109#: blocks/src/quote/table/index.js:211
     110#: blocks/src/quote/table/index.js:270
     111#: blocks/src/quote/table/index.js:334
     112#: blocks/src/quote/table/index.js:399
     113#: blocks/src/quote/table/index.js:674
    114114msgid "%1$s %2$s"
    115115msgstr ""
    116116
    117 #: inc/class-billy.php:275
    118 msgid "Locale"
    119 msgstr ""
    120 
    121 #: inc/class-billy.php:279
    122 #: inc/class-billy.php:1464
    123 #: blocks/build/index.js:1
    124 #: blocks/src/settings/panel/index.js:49
    125 msgid "Currency"
    126 msgstr ""
    127 
    128 #: inc/class-billy.php:283
    129 #: blocks/build/index.js:1
    130 #: blocks/src/accounting/table/deprecatedOuter.js:116
    131 #: blocks/src/accounting/table/deprecatedOuter.js:179
    132 #: blocks/src/accounting/table/deprecatedOuter.js:308
    133 #: blocks/src/accounting/table/deprecatedOuter.js:373
    134 #: blocks/src/accounting/table/deprecatedOuter.js:567
    135 #: blocks/src/accounting/table/deprecatedOuter.js:761
    136 #: blocks/src/accounting/table/index.js:337
    137 #: blocks/src/accounting/table/index.js:400
    138 #: blocks/src/settings/panel/index.js:55
    139 msgid "Taxes"
    140 msgstr ""
    141 
    142 #: inc/class-billy.php:288
    143 msgid "Current invoice"
    144 msgstr ""
    145 
    146 #: inc/class-billy.php:293
    147 msgid "Current quote"
    148 msgstr ""
    149 
    150 #: inc/class-billy.php:297
    151 msgid "Problems have been solved!"
    152 msgstr ""
    153 
    154 #: inc/class-billy.php:299
    155 msgid "Edit"
    156 msgstr ""
    157 
    158 #: inc/class-billy.php:314
    159 msgid "Thank you for purchasing %s!"
    160 msgstr ""
    161 
    162 #: inc/class-billy.php:314
    163 msgid "Get the <u>Pro</u> version"
    164 msgstr ""
    165 
    166 #: inc/class-billy.php:314
    167 msgid "Premium add-on with a project management suite, WooCommerce integration, Contacts, Address Book, QR code payments, Stats & Charts, Share links, and more."
    168 msgstr ""
    169 
    170 #: inc/class-billy.php:314
    171 msgid "Please rate this Plugin"
    172 msgstr ""
    173 
    174 #: inc/class-billy.php:361
    175 msgid "Download %s"
    176 msgstr ""
    177 
    178 #: inc/class-billy.php:361
    179 msgid "PDF"
    180 msgstr ""
    181 
    182 #: inc/class-billy.php:365
    183 msgid "Export %s"
    184 msgstr ""
    185 
    186 #: inc/class-billy.php:365
    187 msgid "TSV"
    188 msgstr ""
    189 
    190 #: inc/class-billy.php:474
    191 msgid "Pending"
    192 msgstr ""
    193 
    194 #: inc/class-billy.php:611
    195 #: inc/class-billy.php:680
    196 msgid "%1$s%2$03s"
    197 msgstr ""
    198 
    199 #: inc/class-billy.php:827
    200 #: inc/class-billy.php:828
    201 msgid "%s Header"
    202 msgstr ""
    203 
    204 #: inc/class-billy.php:1051
    205 msgid "Invoices"
    206 msgstr ""
    207 
    208 #: inc/class-billy.php:1052
    209 #: inc/class-billy.php:1546
    210 #: inc/class-blocks.php:296
     117#: inc/class-billy.php:276
     118#: inc/class-billy.php:1263
     119#: inc/class-billy.php:1648
     120#: inc/class-blocks.php:291
    211121#: blocks/build/index.js:1
    212122#: blocks/src/invoice/actions/index.js:19
     
    217127#: blocks/src/invoice/paymentinformation/index.js:20
    218128#: blocks/src/invoice/table/index.js:40
    219 #: blocks/src/invoice/table/index.js:425
     129#: blocks/src/invoice/table/index.js:424
    220130msgid "Invoice"
    221131msgstr ""
    222132
    223 #: inc/class-billy.php:1096
    224 #: inc/class-billy.php:1251
    225 #: inc/class-billy.php:1461
    226 #: inc/class-billy.php:1566
    227 #: blocks/build/index.js:1
    228 #: blocks/src/settings/panel/index.js:31
    229 msgid "Name"
    230 msgstr ""
    231 
    232 #: inc/class-billy.php:1096
    233 #: inc/class-billy.php:1251
    234 msgid "Company"
    235 msgstr ""
    236 
    237 #: inc/class-billy.php:1096
    238 #: inc/class-billy.php:1251
    239 msgid "Address Field %s"
    240 msgstr ""
    241 
    242 #: inc/class-billy.php:1096
    243 #: inc/class-billy.php:1251
    244 msgid "Country"
    245 msgstr ""
    246 
    247 #: inc/class-billy.php:1125
    248 msgid "Billing Period"
    249 msgstr ""
    250 
    251 #: inc/class-billy.php:1133
    252 #: inc/class-billy.php:1275
    253 #: blocks/build/index.js:1
    254 #: blocks/src/accounting/table/deprecatedOuter.js:95
    255 #: blocks/src/accounting/table/deprecatedOuter.js:287
    256 #: blocks/src/accounting/table/deprecatedOuter.js:481
    257 #: blocks/src/accounting/table/deprecatedOuter.js:675
    258 #: blocks/src/accounting/table/index.js:314
    259 #: blocks/src/accounting/table/index.js:673
    260 msgid "Reference"
    261 msgstr ""
    262 
    263 #: inc/class-billy.php:1152
    264 #: inc/class-billy.php:1158
    265 #: inc/class-billy.php:1190
    266 #: inc/class-billy.php:1294
    267 #: inc/class-billy.php:1300
    268 #: inc/class-billy.php:1330
    269 #: inc/class-billy.php:1384
    270 msgid "%s (optional)"
    271 msgstr ""
    272 
    273 #: inc/class-billy.php:1152
    274 #: inc/class-billy.php:1294
    275 msgid "Subject"
    276 msgstr ""
    277 
    278 #: inc/class-billy.php:1158
    279 #: inc/class-billy.php:1300
    280 msgid "Intro text"
    281 msgstr ""
    282 
    283 #: inc/class-billy.php:1158
    284 #: inc/class-billy.php:1300
    285 msgid "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Commodo quis imperdiet massa tincidunt nunc pulvinar sapien et. Vitae turpis massa sed elementum tempus egestas."
    286 msgstr ""
    287 
    288 #: inc/class-billy.php:1182
    289 #: inc/class-billy.php:1183
    290 #: inc/class-billy.php:1322
    291 #: inc/class-billy.php:1323
    292 #: blocks/build/index.js:1
    293 #: blocks/src/quote/information/index.js:21
    294 msgid "Information"
    295 msgstr ""
    296 
    297 #: inc/class-billy.php:1190
    298 #: inc/class-billy.php:1330
    299 #: inc/class-billy.php:1384
    300 msgid "Notes"
    301 msgstr ""
    302 
    303 #: inc/class-billy.php:1209
    304 msgid "Quotes"
    305 msgstr ""
    306 
    307 #: inc/class-billy.php:1210
    308 #: inc/class-billy.php:1537
    309 #: inc/class-blocks.php:318
     133#: inc/class-billy.php:277
     134#: inc/class-billy.php:1419
     135#: inc/class-billy.php:1639
     136#: inc/class-blocks.php:313
    310137#: blocks/build/index.js:1
    311138#: blocks/src/quote/actions/index.js:19
     
    314141#: blocks/src/quote/meta/index.js:20
    315142#: blocks/src/quote/table/index.js:40
    316 #: blocks/src/quote/table/index.js:424
     143#: blocks/src/quote/table/index.js:423
    317144#: blocks/src/quote/validuntildate/index.js:20
    318145msgid "Quote"
    319146msgstr ""
    320147
    321 #: inc/class-billy.php:1349
    322 #: inc/class-billy.php:1350
     148#: inc/class-billy.php:278
     149#: inc/class-billy.php:1474
     150#: inc/class-billy.php:1475
    323151#: blocks/build/index.js:1
    324152#: blocks/src/accounting/actions/index.js:19
    325153#: blocks/src/accounting/table/index.js:44
    326 #: blocks/src/accounting/table/index.js:438
     154#: blocks/src/accounting/table/index.js:435
    327155msgid "Accounting"
    328156msgstr ""
    329157
    330 #: inc/class-billy.php:1371
     158#: inc/class-billy.php:280
     159msgid "Contact"
     160msgstr ""
     161
     162#: inc/class-billy.php:281
     163msgid "To do"
     164msgstr ""
     165
     166#: inc/class-billy.php:282
     167msgid "Timetracking"
     168msgstr ""
     169
     170#: inc/class-billy.php:284
     171msgid "PDF Content"
     172msgstr ""
     173
     174#: inc/class-billy.php:285
     175msgid "PDF Footer"
     176msgstr ""
     177
     178#: inc/class-billy.php:290
     179msgid "✅ %s"
     180msgstr ""
     181
     182#: inc/class-billy.php:297
     183msgid "Locale"
     184msgstr ""
     185
     186#: inc/class-billy.php:301
     187#: inc/class-billy.php:1566
     188#: blocks/build/index.js:1
     189#: blocks/src/settings/panel/index.js:49
     190msgid "Currency"
     191msgstr ""
     192
     193#: inc/class-billy.php:305
     194#: blocks/build/index.js:1
     195#: blocks/src/accounting/table/deprecatedOuter.js:116
     196#: blocks/src/accounting/table/deprecatedOuter.js:179
     197#: blocks/src/accounting/table/deprecatedOuter.js:308
     198#: blocks/src/accounting/table/deprecatedOuter.js:373
     199#: blocks/src/accounting/table/deprecatedOuter.js:567
     200#: blocks/src/accounting/table/deprecatedOuter.js:761
     201#: blocks/src/accounting/table/index.js:334
     202#: blocks/src/accounting/table/index.js:397
     203#: blocks/src/settings/panel/index.js:55
     204msgid "Taxes"
     205msgstr ""
     206
     207#: inc/class-billy.php:310
     208msgid "Current invoice"
     209msgstr ""
     210
     211#: inc/class-billy.php:315
     212msgid "Current quote"
     213msgstr ""
     214
     215#: inc/class-billy.php:319
     216msgid "Problems have been solved!"
     217msgstr ""
     218
     219#: inc/class-billy.php:321
     220msgid "Edit"
     221msgstr ""
     222
     223#: inc/class-billy.php:326
     224msgid "Customized templates"
     225msgstr ""
     226
     227#: inc/class-billy.php:342
     228msgid "Thank you for purchasing %s!"
     229msgstr ""
     230
     231#: inc/class-billy.php:342
     232msgid "Get the <u>Pro</u> version"
     233msgstr ""
     234
     235#: inc/class-billy.php:342
     236msgid "Premium add-on with a project management suite, WooCommerce integration, Contacts, Address Book, QR code payments, Stats & Charts, Share links, and more."
     237msgstr ""
     238
     239#: inc/class-billy.php:342
     240msgid "Please rate this Plugin"
     241msgstr ""
     242
     243#: inc/class-billy.php:389
     244msgid "Download %s"
     245msgstr ""
     246
     247#: inc/class-billy.php:389
     248msgid "PDF"
     249msgstr ""
     250
     251#: inc/class-billy.php:393
     252msgid "Export %s"
     253msgstr ""
     254
     255#: inc/class-billy.php:393
     256msgid "TSV"
     257msgstr ""
     258
     259#: inc/class-billy.php:535
     260msgid "Pending"
     261msgstr ""
     262
     263#: inc/class-billy.php:672
     264#: inc/class-billy.php:741
     265msgid "%1$s%2$03s"
     266msgstr ""
     267
     268#: inc/class-billy.php:888
     269#: inc/class-billy.php:889
     270msgid "%s Header"
     271msgstr ""
     272
     273#: inc/class-billy.php:1144
     274#: inc/class-billy.php:1315
     275#: inc/class-billy.php:1563
     276#: inc/class-billy.php:1668
     277#: blocks/build/index.js:1
     278#: blocks/src/settings/panel/index.js:31
     279msgid "Name"
     280msgstr ""
     281
     282#: inc/class-billy.php:1144
     283#: inc/class-billy.php:1315
     284msgid "Company"
     285msgstr ""
     286
     287#: inc/class-billy.php:1144
     288#: inc/class-billy.php:1315
     289msgid "Address Field %s"
     290msgstr ""
     291
     292#: inc/class-billy.php:1144
     293#: inc/class-billy.php:1315
     294msgid "Country"
     295msgstr ""
     296
     297#: inc/class-billy.php:1173
     298msgid "Billing Period"
     299msgstr ""
     300
     301#: inc/class-billy.php:1181
     302#: inc/class-billy.php:1339
     303#: blocks/build/index.js:1
     304#: blocks/src/accounting/table/deprecatedOuter.js:95
     305#: blocks/src/accounting/table/deprecatedOuter.js:287
     306#: blocks/src/accounting/table/deprecatedOuter.js:481
     307#: blocks/src/accounting/table/deprecatedOuter.js:675
     308#: blocks/src/accounting/table/index.js:311
     309#: blocks/src/accounting/table/index.js:670
     310msgid "Reference"
     311msgstr ""
     312
     313#: inc/class-billy.php:1200
     314#: inc/class-billy.php:1206
     315#: inc/class-billy.php:1238
     316#: inc/class-billy.php:1358
     317#: inc/class-billy.php:1364
     318#: inc/class-billy.php:1394
     319#: inc/class-billy.php:1464
     320msgid "%s (optional)"
     321msgstr ""
     322
     323#: inc/class-billy.php:1200
     324#: inc/class-billy.php:1358
     325msgid "Subject"
     326msgstr ""
     327
     328#: inc/class-billy.php:1206
     329#: inc/class-billy.php:1364
     330msgid "Intro text"
     331msgstr ""
     332
     333#: inc/class-billy.php:1206
     334#: inc/class-billy.php:1364
     335msgid "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Commodo quis imperdiet massa tincidunt nunc pulvinar sapien et. Vitae turpis massa sed elementum tempus egestas."
     336msgstr ""
     337
     338#: inc/class-billy.php:1230
     339#: inc/class-billy.php:1231
     340#: inc/class-billy.php:1386
     341#: inc/class-billy.php:1387
     342#: blocks/build/index.js:1
     343#: blocks/src/quote/information/index.js:21
     344msgid "Information"
     345msgstr ""
     346
     347#: inc/class-billy.php:1238
     348#: inc/class-billy.php:1394
     349#: inc/class-billy.php:1464
     350msgid "Notes"
     351msgstr ""
     352
     353#: inc/class-billy.php:1262
     354msgid "Invoices"
     355msgstr ""
     356
     357#: inc/class-billy.php:1418
     358msgid "Quotes"
     359msgstr ""
     360
     361#: inc/class-billy.php:1451
    331362msgid "Heading"
    332363msgstr ""
    333364
    334 #: inc/class-billy.php:1445
     365#: inc/class-billy.php:1547
    335366#: blocks/build/index.js:1
    336367#: blocks/src/accounting/table/deprecatedOuter.js:102
     
    345376#: blocks/src/accounting/table/deprecatedOuter.js:710
    346377#: blocks/src/accounting/table/deprecatedOuter.js:762
    347 #: blocks/src/accounting/table/index.js:187
    348 #: blocks/src/accounting/table/index.js:242
    349 #: blocks/src/accounting/table/index.js:321
    350 #: blocks/src/accounting/table/index.js:352
    351 #: blocks/src/accounting/table/index.js:401
     378#: blocks/src/accounting/table/index.js:184
     379#: blocks/src/accounting/table/index.js:239
     380#: blocks/src/accounting/table/index.js:318
     381#: blocks/src/accounting/table/index.js:349
     382#: blocks/src/accounting/table/index.js:398
    352383msgid "Earnings"
    353384msgstr ""
    354385
    355 #: inc/class-billy.php:1446
     386#: inc/class-billy.php:1548
    356387#: blocks/build/index.js:1
    357388#: blocks/src/accounting/table/deprecatedOuter.js:109
     
    366397#: blocks/src/accounting/table/deprecatedOuter.js:711
    367398#: blocks/src/accounting/table/deprecatedOuter.js:763
    368 #: blocks/src/accounting/table/index.js:204
    369 #: blocks/src/accounting/table/index.js:257
    370 #: blocks/src/accounting/table/index.js:328
    371 #: blocks/src/accounting/table/index.js:353
    372 #: blocks/src/accounting/table/index.js:402
     399#: blocks/src/accounting/table/index.js:201
     400#: blocks/src/accounting/table/index.js:254
     401#: blocks/src/accounting/table/index.js:325
     402#: blocks/src/accounting/table/index.js:350
     403#: blocks/src/accounting/table/index.js:399
    373404msgid "Expenses"
    374405msgstr ""
    375406
    376 #: inc/class-billy.php:1462
    377 #: inc/class-billy.php:1587
     407#: inc/class-billy.php:1564
     408#: inc/class-billy.php:1689
    378409#: blocks/build/index.js:1
    379410#: blocks/src/settings/panel/index.js:37
     
    381412msgstr ""
    382413
    383 #: inc/class-billy.php:1463
    384 #: inc/class-billy.php:1680
     414#: inc/class-billy.php:1565
     415#: inc/class-billy.php:1782
    385416#: blocks/build/index.js:1
    386417#: blocks/src/settings/panel/index.js:43
     
    388419msgstr ""
    389420
    390 #: inc/class-billy.php:1518
     421#: inc/class-billy.php:1620
    391422msgid "Plugin Setup"
    392423msgstr ""
    393424
    394 #: inc/class-billy.php:1528
     425#: inc/class-billy.php:1630
    395426msgid "General"
    396427msgstr ""
    397428
    398 #: inc/class-billy.php:1603
    399 #: inc/class-billy.php:1621
     429#: inc/class-billy.php:1705
     430#: inc/class-billy.php:1723
    400431msgid "Geocoding powered by %s"
    401432msgstr ""
    402433
    403 #: inc/class-billy.php:1620
     434#: inc/class-billy.php:1722
    404435msgid "Address (geocoded)"
    405436msgstr ""
    406437
    407 #: inc/class-billy.php:1642
     438#: inc/class-billy.php:1744
    408439msgid "Email"
    409440msgstr ""
    410441
    411 #: inc/class-billy.php:1643
     442#: inc/class-billy.php:1745
    412443msgid "Enter your email"
    413444msgstr ""
    414445
    415 #: inc/class-billy.php:1663
     446#: inc/class-billy.php:1765
    416447msgid "Phone"
    417448msgstr ""
    418449
    419 #: inc/class-billy.php:1664
     450#: inc/class-billy.php:1766
    420451msgid "Enter your phone number"
    421452msgstr ""
    422453
    423 #: inc/class-billy.php:1681
     454#: inc/class-billy.php:1783
    424455msgid "Enter your VAT identification number or Taxpayer ID"
    425456msgstr ""
    426457
    427 #: inc/class-billy.php:1698
     458#: inc/class-billy.php:1800
    428459msgid "Currency Code"
    429460msgstr ""
    430461
    431 #: inc/class-billy.php:1699
    432 #: inc/class-billy.php:1721
     462#: inc/class-billy.php:1801
     463#: inc/class-billy.php:1823
    433464msgid "Caution: Any changes made here may affect existing entries. Create a backup first!"
    434465msgstr ""
    435466
    436 #: inc/class-billy.php:1716
     467#: inc/class-billy.php:1818
    437468msgid "Tax Rates"
    438469msgstr ""
    439470
    440 #: inc/class-billy.php:1718
     471#: inc/class-billy.php:1820
    441472msgid "Enter the taxrates separated by newline: e.g. %s"
    442473msgstr ""
    443474
    444 #: inc/class-billy.php:1737
     475#: inc/class-billy.php:1839
    445476msgid "Current invoice number"
    446477msgstr ""
    447478
    448 #: inc/class-billy.php:1738
     479#: inc/class-billy.php:1840
    449480msgid "Upcoming invoice numbers will be autoincremented based on this value!"
    450481msgstr ""
    451482
    452 #: inc/class-billy.php:1766
    453 #: blocks/build/index.js:1
    454 #: blocks/src/invoice/invoice-number/index.js:45
     483#: inc/class-billy.php:1868
     484#: blocks/build/index.js:1
     485#: blocks/src/invoice/invoice-number/index.js:71
    455486msgid "Invoice number: Prefix"
    456487msgstr ""
    457488
    458 #: inc/class-billy.php:1767
    459 #: inc/class-billy.php:1891
     489#: inc/class-billy.php:1869
     490#: inc/class-billy.php:1993
    460491msgid "You can include placeholders like {YEAR}, {MONTH} and {DAY}."
    461492msgstr ""
    462493
    463 #: inc/class-billy.php:1783
     494#: inc/class-billy.php:1885
    464495msgid "Payment due within # days"
    465496msgstr ""
    466497
    467 #: inc/class-billy.php:1803
     498#: inc/class-billy.php:1905
    468499#: blocks/build/index.js:1
    469500#: blocks/src/invoice/paymentinformation/index.js:21
    470 #: blocks/src/invoice/paymentinformation/index.js:45
     501#: blocks/src/invoice/paymentinformation/index.js:71
    471502msgid "Payment Information"
    472503msgstr ""
    473504
    474 #: inc/class-billy.php:1804
     505#: inc/class-billy.php:1906
    475506msgid "Add the payment instructions and link to your terms."
    476507msgstr ""
    477508
    478 #: inc/class-billy.php:1810
     509#: inc/class-billy.php:1912
    479510msgid "Thank you for your business!"
    480511msgstr ""
    481512
    482 #: inc/class-billy.php:1824
    483 #: blocks/build/index.js:1
    484 #: blocks/src/quote/information/index.js:45
     513#: inc/class-billy.php:1926
     514#: blocks/build/index.js:1
     515#: blocks/src/quote/information/index.js:71
    485516msgid "Quote Information"
    486517msgstr ""
    487518
    488 #: inc/class-billy.php:1825
     519#: inc/class-billy.php:1927
    489520msgid "Inform your contacts about special terms, quote expiration clauses, etc."
    490521msgstr ""
    491522
    492 #: inc/class-billy.php:1831
     523#: inc/class-billy.php:1933
    493524msgid "We will be happy to answer any questions you may have!"
    494525msgstr ""
    495526
    496 #: inc/class-billy.php:1845
     527#: inc/class-billy.php:1947
    497528msgid "Current quote number"
    498529msgstr ""
    499530
    500 #: inc/class-billy.php:1846
     531#: inc/class-billy.php:1948
    501532msgid "Upcoming quote numbers will be autoincremented based on this value!"
    502533msgstr ""
    503534
    504 #: inc/class-billy.php:1873
     535#: inc/class-billy.php:1975
    505536msgid "Just use the current date (\"Ymd\") as quote number"
    506537msgstr ""
    507538
    508 #: inc/class-billy.php:1890
     539#: inc/class-billy.php:1992
    509540msgid "Quote number: Prefix"
    510541msgstr ""
    511542
    512 #: inc/class-billy.php:1907
     543#: inc/class-billy.php:2009
    513544msgid "Quote valid for # days"
    514545msgstr ""
    515546
    516 #: inc/class-billy.php:1948
     547#: inc/class-billy.php:2050
    517548msgid "Geocode was not successful - please provide a valid address: %s"
    518549msgstr ""
    519550
    520 #: inc/class-billy.php:1969
     551#: inc/class-billy.php:2071
    521552msgid "Please provide a valid currency format"
    522553msgstr ""
    523554
    524 #: inc/class-billy.php:1995
     555#: inc/class-billy.php:2097
    525556msgid "Please separate the taxrates by newline and don't forget to append the \"%\" sign to each value."
    526557msgstr ""
    527558
    528 #: inc/class-blocks.php:194
     559#: inc/class-blocks.php:188
    529560msgid "Billy Blocks"
    530561msgstr ""
    531562
    532 #: inc/class-blocks.php:246
     563#: inc/class-blocks.php:241
    533564#: blocks/build/index.js:1
    534565#: blocks/src/invoice/meta/index.js:84
     
    541572msgstr ""
    542573
    543 #: inc/class-blocks.php:260
     574#: inc/class-blocks.php:255
    544575msgid "<strong>%1$s</strong> %2$s"
    545576msgstr ""
    546577
    547 #: inc/class-blocks.php:260
     578#: inc/class-blocks.php:255
    548579#: blocks/build/index.js:1
    549580#: blocks/src/invoice/meta/index.js:89
     
    558589msgstr ""
    559590
    560 #: inc/class-blocks.php:273
     591#: inc/class-blocks.php:268
    561592#: blocks/build/index.js:1
    562593#: blocks/src/accounting/table/deprecatedOuter.js:81
     
    564595#: blocks/src/accounting/table/deprecatedOuter.js:467
    565596#: blocks/src/accounting/table/deprecatedOuter.js:661
    566 #: blocks/src/accounting/table/index.js:300
    567 #: blocks/src/accounting/table/index.js:606
     597#: blocks/src/accounting/table/index.js:297
     598#: blocks/src/accounting/table/index.js:603
    568599#: blocks/src/invoice/date/index.js:21
    569600#: blocks/src/invoice/date/index.js:45
     
    572603msgstr ""
    573604
    574 #: inc/class-blocks.php:296
    575 #: inc/class-blocks.php:318
     605#: inc/class-blocks.php:291
     606#: inc/class-blocks.php:313
    576607msgid "Current %s"
    577608msgstr ""
    578609
    579 #: inc/class-blocks.php:307
     610#: inc/class-blocks.php:302
    580611msgid "Due By"
    581612msgstr ""
    582613
    583 #: inc/class-blocks.php:340
     614#: inc/class-blocks.php:335
    584615#: blocks/build/index.js:1
    585616#: blocks/src/quote/validuntildate/index.js:21
     
    587618msgstr ""
    588619
    589 #: inc/class-pdfexport.php:125
     620#: inc/class-pdfexport.php:127
    590621msgid "You are not allowed to view this content."
    591622msgstr ""
    592623
    593 #: inc/class-pdfexport.php:161
     624#: inc/class-pdfexport.php:168
    594625msgid "DRAFT"
     626msgstr ""
     627
     628#: inc/class-pdfexport.php:221
     629#: blocks/build/index.js:1
     630#: blocks/src/accounting/table/deprecatedOuter.js:88
     631#: blocks/src/accounting/table/deprecatedOuter.js:280
     632#: blocks/src/accounting/table/deprecatedOuter.js:474
     633#: blocks/src/accounting/table/deprecatedOuter.js:668
     634#: blocks/src/accounting/table/index.js:304
     635#: blocks/src/invoice/table/deprecatedOuter.js:85
     636#: blocks/src/invoice/table/deprecatedOuter.js:222
     637#: blocks/src/invoice/table/index.js:309
     638#: blocks/src/quote/table/deprecatedOuter.js:85
     639#: blocks/src/quote/table/deprecatedOuter.js:221
     640#: blocks/src/quote/table/index.js:308
     641msgid "Description"
     642msgstr ""
     643
     644#: inc/class-pdfexport.php:222
     645#: blocks/build/index.js:1
     646#: blocks/src/invoice/table/deprecatedOuter.js:88
     647#: blocks/src/invoice/table/deprecatedOuter.js:225
     648#: blocks/src/invoice/table/index.js:310
     649#: blocks/src/invoice/table/index.js:602
     650#: blocks/src/quote/table/deprecatedOuter.js:88
     651#: blocks/src/quote/table/deprecatedOuter.js:224
     652#: blocks/src/quote/table/index.js:309
     653#: blocks/src/quote/table/index.js:601
     654msgid "Amount"
     655msgstr ""
     656
     657#: inc/class-pdfexport.php:223
     658#: blocks/build/index.js:1
     659#: blocks/src/invoice/table/deprecatedOuter.js:110
     660#: blocks/src/invoice/table/deprecatedOuter.js:247
     661#: blocks/src/invoice/table/index.js:207
     662#: blocks/src/invoice/table/index.js:324
     663#: blocks/src/quote/table/deprecatedOuter.js:110
     664#: blocks/src/quote/table/deprecatedOuter.js:246
     665#: blocks/src/quote/table/index.js:206
     666#: blocks/src/quote/table/index.js:323
     667msgid "Subtotal"
     668msgstr ""
     669
     670#: inc/class-pdfexport.php:224
     671#: blocks/build/index.js:1
     672#: blocks/src/invoice/table/deprecatedOuter.js:110
     673#: blocks/src/invoice/table/deprecatedOuter.js:152
     674#: blocks/src/invoice/table/deprecatedOuter.js:247
     675#: blocks/src/invoice/table/deprecatedOuter.js:289
     676#: blocks/src/invoice/table/index.js:208
     677#: blocks/src/invoice/table/index.js:267
     678#: blocks/src/invoice/table/index.js:325
     679#: blocks/src/invoice/table/index.js:391
     680#: blocks/src/quote/table/deprecatedOuter.js:110
     681#: blocks/src/quote/table/deprecatedOuter.js:152
     682#: blocks/src/quote/table/deprecatedOuter.js:246
     683#: blocks/src/quote/table/deprecatedOuter.js:288
     684#: blocks/src/quote/table/index.js:207
     685#: blocks/src/quote/table/index.js:266
     686#: blocks/src/quote/table/index.js:324
     687#: blocks/src/quote/table/index.js:390
     688msgid "Total"
     689msgstr ""
     690
     691#: inc/class-pdfexport.php:225
     692#: blocks/build/index.js:1
     693#: blocks/src/accounting/table/deprecatedOuter.js:502
     694#: blocks/src/accounting/table/deprecatedOuter.js:696
     695#: blocks/src/accounting/table/index.js:707
     696#: blocks/src/invoice/table/deprecatedOuter.js:94
     697#: blocks/src/invoice/table/deprecatedOuter.js:126
     698#: blocks/src/invoice/table/deprecatedOuter.js:231
     699#: blocks/src/invoice/table/deprecatedOuter.js:263
     700#: blocks/src/invoice/table/index.js:222
     701#: blocks/src/invoice/table/index.js:312
     702#: blocks/src/invoice/table/index.js:344
     703#: blocks/src/invoice/table/index.js:616
     704#: blocks/src/quote/table/deprecatedOuter.js:94
     705#: blocks/src/quote/table/deprecatedOuter.js:126
     706#: blocks/src/quote/table/deprecatedOuter.js:230
     707#: blocks/src/quote/table/deprecatedOuter.js:262
     708#: blocks/src/quote/table/index.js:221
     709#: blocks/src/quote/table/index.js:311
     710#: blocks/src/quote/table/index.js:343
     711#: blocks/src/quote/table/index.js:615
     712msgid "Tax"
    595713msgstr ""
    596714
     
    605723#: blocks/src/invoice/date/index.js:37
    606724#: blocks/src/invoice/duedate/index.js:37
    607 #: blocks/src/invoice/invoice-number/index.js:37
    608 #: blocks/src/invoice/paymentinformation/index.js:37
    609 #: blocks/src/quote/information/index.js:37
     725#: blocks/src/invoice/invoice-number/index.js:63
     726#: blocks/src/invoice/paymentinformation/index.js:63
     727#: blocks/src/quote/information/index.js:63
    610728#: blocks/src/_deprecated/header/index.js:41
    611729msgid "Info"
     
    619737#: blocks/build/index.js:1
    620738#: blocks/src/invoice/duedate/index.js:41
    621 #: blocks/src/invoice/invoice-number/index.js:41
    622 #: blocks/src/invoice/paymentinformation/index.js:41
    623 #: blocks/src/quote/information/index.js:41
     739#: blocks/src/invoice/invoice-number/index.js:67
     740#: blocks/src/invoice/paymentinformation/index.js:67
     741#: blocks/src/quote/information/index.js:67
    624742#: blocks/src/_deprecated/header/index.js:54
    625743msgid "The %s values can be modified in the Theme Customizer."
     
    630748#: blocks/src/accounting/actions/index.js:53
    631749#: blocks/src/accounting/table/index.js:43
    632 #: blocks/src/accounting/table/index.js:437
     750#: blocks/src/accounting/table/index.js:434
    633751#: blocks/src/invoice/actions/index.js:18
    634752#: blocks/src/invoice/actions/index.js:53
     
    639757#: blocks/src/invoice/paymentinformation/index.js:19
    640758#: blocks/src/invoice/table/index.js:39
    641 #: blocks/src/invoice/table/index.js:424
     759#: blocks/src/invoice/table/index.js:423
    642760#: blocks/src/quote/actions/index.js:18
    643761#: blocks/src/quote/actions/index.js:53
     
    646764#: blocks/src/quote/meta/index.js:19
    647765#: blocks/src/quote/table/index.js:39
    648 #: blocks/src/quote/table/index.js:423
     766#: blocks/src/quote/table/index.js:422
    649767#: blocks/src/quote/validuntildate/index.js:19
    650768msgid "%1$s: %2$s"
     
    653771#: blocks/build/index.js:1
    654772#: blocks/src/accounting/actions/index.js:20
    655 #: blocks/src/accounting/table/index.js:164
     773#: blocks/src/accounting/table/index.js:161
    656774#: blocks/src/invoice/actions/index.js:20
    657 #: blocks/src/invoice/table/index.js:183
     775#: blocks/src/invoice/table/index.js:182
    658776#: blocks/src/quote/actions/index.js:20
    659 #: blocks/src/quote/table/index.js:182
     777#: blocks/src/quote/table/index.js:181
    660778msgid "Actions"
    661779msgstr ""
     
    675793
    676794#: blocks/build/index.js:1
     795#: blocks/src/invoice/invoice-number/index.js:55
    677796#: blocks/src/invoice/meta/index.js:64
     797#: blocks/src/invoice/paymentinformation/index.js:55
     798#: blocks/src/quote/information/index.js:55
    678799#: blocks/src/quote/meta/index.js:64
    679800msgid "Label"
     
    694815#: blocks/build/index.js:1
    695816#: blocks/src/invoice/date/index.js:41
    696 #: blocks/src/invoice/invoice-number/index.js:52
     817#: blocks/src/invoice/invoice-number/index.js:78
    697818msgid "Due to legal requirements in some countries, autogenerated data like %s can't be modified anymore after an invoice has been created in the system!"
    698819msgstr ""
     
    714835
    715836#: blocks/build/index.js:1
    716 #: blocks/src/invoice/invoice-number/index.js:56
     837#: blocks/src/invoice/invoice-number/index.js:82
    717838#: blocks/src/settings/panel/index.js:25
    718839msgid "Invoice number"
     
    724845#: blocks/src/accounting/table/deprecatedOuter.js:460
    725846#: blocks/src/accounting/table/deprecatedOuter.js:654
    726 #: blocks/src/accounting/table/index.js:297
     847#: blocks/src/accounting/table/index.js:294
    727848#: blocks/src/invoice/table/deprecatedOuter.js:82
    728849#: blocks/src/invoice/table/deprecatedOuter.js:219
    729 #: blocks/src/invoice/table/index.js:309
     850#: blocks/src/invoice/table/index.js:308
    730851#: blocks/src/quote/table/deprecatedOuter.js:82
    731852#: blocks/src/quote/table/deprecatedOuter.js:218
    732 #: blocks/src/quote/table/index.js:308
     853#: blocks/src/quote/table/index.js:307
    733854msgid "#"
    734 msgstr ""
    735 
    736 #: blocks/build/index.js:1
    737 #: blocks/src/accounting/table/deprecatedOuter.js:88
    738 #: blocks/src/accounting/table/deprecatedOuter.js:280
    739 #: blocks/src/accounting/table/deprecatedOuter.js:474
    740 #: blocks/src/accounting/table/deprecatedOuter.js:668
    741 #: blocks/src/accounting/table/index.js:307
    742 #: blocks/src/invoice/table/deprecatedOuter.js:85
    743 #: blocks/src/invoice/table/deprecatedOuter.js:222
    744 #: blocks/src/invoice/table/index.js:310
    745 #: blocks/src/quote/table/deprecatedOuter.js:85
    746 #: blocks/src/quote/table/deprecatedOuter.js:221
    747 #: blocks/src/quote/table/index.js:309
    748 msgid "Description"
    749 msgstr ""
    750 
    751 #: blocks/build/index.js:1
    752 #: blocks/src/invoice/table/deprecatedOuter.js:88
    753 #: blocks/src/invoice/table/deprecatedOuter.js:225
    754 #: blocks/src/invoice/table/index.js:311
    755 #: blocks/src/invoice/table/index.js:603
    756 #: blocks/src/quote/table/deprecatedOuter.js:88
    757 #: blocks/src/quote/table/deprecatedOuter.js:224
    758 #: blocks/src/quote/table/index.js:310
    759 #: blocks/src/quote/table/index.js:602
    760 msgid "Amount"
    761 msgstr ""
    762 
    763 #: blocks/build/index.js:1
    764 #: blocks/src/accounting/table/deprecatedOuter.js:502
    765 #: blocks/src/accounting/table/deprecatedOuter.js:696
    766 #: blocks/src/accounting/table/index.js:710
    767 #: blocks/src/invoice/table/deprecatedOuter.js:94
    768 #: blocks/src/invoice/table/deprecatedOuter.js:126
    769 #: blocks/src/invoice/table/deprecatedOuter.js:231
    770 #: blocks/src/invoice/table/deprecatedOuter.js:263
    771 #: blocks/src/invoice/table/index.js:223
    772 #: blocks/src/invoice/table/index.js:313
    773 #: blocks/src/invoice/table/index.js:345
    774 #: blocks/src/invoice/table/index.js:617
    775 #: blocks/src/quote/table/deprecatedOuter.js:94
    776 #: blocks/src/quote/table/deprecatedOuter.js:126
    777 #: blocks/src/quote/table/deprecatedOuter.js:230
    778 #: blocks/src/quote/table/deprecatedOuter.js:262
    779 #: blocks/src/quote/table/index.js:222
    780 #: blocks/src/quote/table/index.js:312
    781 #: blocks/src/quote/table/index.js:344
    782 #: blocks/src/quote/table/index.js:616
    783 msgid "Tax"
    784 msgstr ""
    785 
    786 #: blocks/build/index.js:1
    787 #: blocks/src/invoice/table/deprecatedOuter.js:110
    788 #: blocks/src/invoice/table/deprecatedOuter.js:247
    789 #: blocks/src/invoice/table/index.js:208
    790 #: blocks/src/invoice/table/index.js:325
    791 #: blocks/src/quote/table/deprecatedOuter.js:110
    792 #: blocks/src/quote/table/deprecatedOuter.js:246
    793 #: blocks/src/quote/table/index.js:207
    794 #: blocks/src/quote/table/index.js:324
    795 msgid "Subtotal"
    796 msgstr ""
    797 
    798 #: blocks/build/index.js:1
    799 #: blocks/src/invoice/table/deprecatedOuter.js:110
    800 #: blocks/src/invoice/table/deprecatedOuter.js:152
    801 #: blocks/src/invoice/table/deprecatedOuter.js:247
    802 #: blocks/src/invoice/table/deprecatedOuter.js:289
    803 #: blocks/src/invoice/table/index.js:209
    804 #: blocks/src/invoice/table/index.js:268
    805 #: blocks/src/invoice/table/index.js:326
    806 #: blocks/src/invoice/table/index.js:392
    807 #: blocks/src/quote/table/deprecatedOuter.js:110
    808 #: blocks/src/quote/table/deprecatedOuter.js:152
    809 #: blocks/src/quote/table/deprecatedOuter.js:246
    810 #: blocks/src/quote/table/deprecatedOuter.js:288
    811 #: blocks/src/quote/table/index.js:208
    812 #: blocks/src/quote/table/index.js:267
    813 #: blocks/src/quote/table/index.js:325
    814 #: blocks/src/quote/table/index.js:391
    815 msgid "Total"
    816855msgstr ""
    817856
     
    819858#: blocks/src/invoice/table/deprecatedOuter.js:136
    820859#: blocks/src/invoice/table/deprecatedOuter.js:273
    821 #: blocks/src/invoice/table/index.js:243
    822 #: blocks/src/invoice/table/index.js:368
     860#: blocks/src/invoice/table/index.js:242
     861#: blocks/src/invoice/table/index.js:367
    823862#: blocks/src/quote/table/deprecatedOuter.js:136
    824863#: blocks/src/quote/table/deprecatedOuter.js:272
    825 #: blocks/src/quote/table/index.js:242
    826 #: blocks/src/quote/table/index.js:367
     864#: blocks/src/quote/table/index.js:241
     865#: blocks/src/quote/table/index.js:366
    827866msgid "%1$s %2$s %3$s"
    828867msgstr ""
     
    836875
    837876#: blocks/build/index.js:1
    838 #: blocks/src/accounting/table/index.js:170
    839 #: blocks/src/invoice/table/index.js:189
    840 #: blocks/src/quote/table/index.js:188
     877#: blocks/src/accounting/table/index.js:167
     878#: blocks/src/invoice/table/index.js:188
     879#: blocks/src/quote/table/index.js:187
    841880msgid "Update Totals"
    842881msgstr ""
    843882
    844883#: blocks/build/index.js:1
    845 #: blocks/src/accounting/table/index.js:439
    846 #: blocks/src/invoice/table/index.js:426
    847 #: blocks/src/quote/table/index.js:425
     884#: blocks/src/accounting/table/index.js:436
     885#: blocks/src/invoice/table/index.js:425
     886#: blocks/src/quote/table/index.js:424
    848887msgid "Table Row"
    849888msgstr ""
    850889
    851890#: blocks/build/index.js:1
    852 #: blocks/src/invoice/table/index.js:550
    853 #: blocks/src/quote/table/index.js:549
     891#: blocks/src/invoice/table/index.js:549
     892#: blocks/src/quote/table/index.js:548
    854893msgid "Quantity/Rate Calculator"
    855894msgstr ""
    856895
    857896#: blocks/build/index.js:1
     897#: blocks/src/invoice/table/index.js:552
     898#: blocks/src/quote/table/index.js:551
     899msgid "Quantity"
     900msgstr ""
     901
     902#: blocks/build/index.js:1
     903#: blocks/src/accounting/table/index.js:684
     904#: blocks/src/accounting/table/index.js:697
     905#: blocks/src/accounting/table/index.js:710
    858906#: blocks/src/invoice/table/index.js:553
     907#: blocks/src/invoice/table/index.js:565
     908#: blocks/src/invoice/table/index.js:606
     909#: blocks/src/invoice/table/index.js:648
    859910#: blocks/src/quote/table/index.js:552
    860 msgid "Quantity"
    861 msgstr ""
    862 
    863 #: blocks/build/index.js:1
    864 #: blocks/src/accounting/table/index.js:687
    865 #: blocks/src/accounting/table/index.js:700
    866 #: blocks/src/accounting/table/index.js:713
    867 #: blocks/src/invoice/table/index.js:554
    868 #: blocks/src/invoice/table/index.js:566
    869 #: blocks/src/invoice/table/index.js:607
    870 #: blocks/src/invoice/table/index.js:649
    871 #: blocks/src/quote/table/index.js:553
    872 #: blocks/src/quote/table/index.js:565
    873 #: blocks/src/quote/table/index.js:606
    874 #: blocks/src/quote/table/index.js:648
     911#: blocks/src/quote/table/index.js:564
     912#: blocks/src/quote/table/index.js:605
     913#: blocks/src/quote/table/index.js:647
    875914msgid "0"
    876915msgstr ""
    877916
    878917#: blocks/build/index.js:1
    879 #: blocks/src/accounting/table/index.js:683
    880 #: blocks/src/accounting/table/index.js:696
    881 #: blocks/src/accounting/table/index.js:709
     918#: blocks/src/accounting/table/index.js:680
     919#: blocks/src/accounting/table/index.js:693
     920#: blocks/src/accounting/table/index.js:706
     921#: blocks/src/invoice/table/index.js:561
     922#: blocks/src/invoice/table/index.js:601
     923#: blocks/src/invoice/table/index.js:615
     924#: blocks/src/quote/table/index.js:560
     925#: blocks/src/quote/table/index.js:600
     926#: blocks/src/quote/table/index.js:614
     927msgid "%1$s in %2$s"
     928msgstr ""
     929
     930#: blocks/build/index.js:1
    882931#: blocks/src/invoice/table/index.js:562
    883 #: blocks/src/invoice/table/index.js:602
    884 #: blocks/src/invoice/table/index.js:616
    885932#: blocks/src/quote/table/index.js:561
    886 #: blocks/src/quote/table/index.js:601
    887 #: blocks/src/quote/table/index.js:615
    888 msgid "%1$s in %2$s"
    889 msgstr ""
    890 
    891 #: blocks/build/index.js:1
    892 #: blocks/src/invoice/table/index.js:563
    893 #: blocks/src/quote/table/index.js:562
    894933msgid "Rate"
    895934msgstr ""
     
    900939#: blocks/src/accounting/table/deprecatedOuter.js:515
    901940#: blocks/src/accounting/table/deprecatedOuter.js:709
    902 #: blocks/src/accounting/table/index.js:351
     941#: blocks/src/accounting/table/index.js:348
    903942msgid "%1$s / %2$s"
    904943msgstr ""
     
    909948#: blocks/src/accounting/table/deprecatedOuter.js:546
    910949#: blocks/src/accounting/table/deprecatedOuter.js:740
    911 #: blocks/src/accounting/table/index.js:222
    912 #: blocks/src/accounting/table/index.js:381
     950#: blocks/src/accounting/table/index.js:219
     951#: blocks/src/accounting/table/index.js:378
    913952msgid "Profit"
    914953msgstr ""
     
    919958#: blocks/src/accounting/table/deprecatedOuter.js:566
    920959#: blocks/src/accounting/table/deprecatedOuter.js:760
    921 #: blocks/src/accounting/table/index.js:399
     960#: blocks/src/accounting/table/index.js:396
    922961msgid "%1$s (%2$s / %3$s)"
    923962msgstr ""
     
    925964#: blocks/build/index.js:1
    926965#: blocks/src/accounting/table/deprecatedOuter.js:682
    927 #: blocks/src/accounting/table/index.js:684
     966#: blocks/src/accounting/table/index.js:681
    928967msgid "Earning"
    929968msgstr ""
     
    931970#: blocks/build/index.js:1
    932971#: blocks/src/accounting/table/deprecatedOuter.js:689
    933 #: blocks/src/accounting/table/index.js:697
     972#: blocks/src/accounting/table/index.js:694
    934973msgid "Expense"
    935974msgstr ""
     
    942981#: blocks/src/accounting/table/deprecatedInner.js:375
    943982#: blocks/src/accounting/table/deprecatedInner.js:394
    944 #: blocks/src/accounting/table/index.js:643
    945 #: blocks/src/accounting/table/index.js:745
    946 #: blocks/src/accounting/table/index.js:761
     983#: blocks/src/accounting/table/index.js:640
     984#: blocks/src/accounting/table/index.js:742
     985#: blocks/src/accounting/table/index.js:758
    947986msgid "Q%s"
    948987msgstr ""
    949988
    950989#: blocks/build/index.js:1
    951 #: blocks/src/accounting/table/index.js:241
    952 #: blocks/src/accounting/table/index.js:256
     990#: blocks/src/accounting/table/index.js:238
     991#: blocks/src/accounting/table/index.js:253
    953992msgid "Taxes (%s)"
    954993msgstr ""
    955994
    956995#: blocks/build/index.js:1
    957 #: blocks/src/accounting/table/index.js:616
     996#: blocks/src/accounting/table/index.js:613
    958997msgid "Reference: %s"
    959998msgstr ""
    960999
    9611000#: blocks/build/index.js:1
    962 #: blocks/src/accounting/table/index.js:620
     1001#: blocks/src/accounting/table/index.js:617
    9631002msgid "Post"
    9641003msgstr ""
  • billy/trunk/readme.txt

    r3247811 r3251553  
    55Requires at least: 6.0
    66Tested up to: 6.7
    7 Stable tag: 1.10.4
     7Stable tag: 1.10.5
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    151151== Changelog ==
    152152
     153= 1.10.5 =
     154* Refactor PDF generator: Ensure that some non-translated strings are correctly output
     155* Vendor-prefix composer packages using Strauss to improve compatibility with third-party plugins using the same dependencies (e.g. mPDF)
     156
    153157= 1.10.4 =
    154158* PDF generator: Remove an outdated workaround that potentially caused a PHP error
Note: See TracChangeset for help on using the changeset viewer.