mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Update ReadME
This commit is contained in:
parent
72481481fe
commit
9b1ad2794e
52
README.md
52
README.md
@ -18,18 +18,34 @@ Just make sure to add the `invoice-ninja` tag to your question.
|
||||
|
||||
Version 5 of Invoice Ninja is here! We've taken the best parts of version 4 and bolted on all of the most requested features to produce a invoicing application like no other.
|
||||
|
||||
The new interface has a lot more functionality so it isn't a carbon copy of v4, but once you get used to the new layout and functionality we are sure you will love it!
|
||||
All Pro and Enterprise features from the hosted app are included in the open-code. We offer a $30 per year white-label license to remove the Invoice Ninja branding from client facing parts of the app.
|
||||
|
||||
## Referral Program
|
||||
* Earn 50% of Pro & Enterprise Plans up to 4 years - [Learn more](https://www.invoiceninja.com/referral-program/)
|
||||
* [Videos](https://www.youtube.com/@appinvoiceninja)
|
||||
* [API Documentation](https://app.swaggerhub.com/apis/invoiceninja/invoiceninja)
|
||||
* [APP Documentation](https://invoiceninja.github.io/)
|
||||
* [Support Forum](https://forum.invoiceninja.com)
|
||||
* [StackOverflow](https://stackoverflow.com/tags/invoice-ninja/)
|
||||
|
||||
## Mobile App
|
||||
* [iPhone](https://apps.apple.com/us/app/invoice-ninja-v5/id1503970375#?platform=iphone)
|
||||
* [Android](https://play.google.com/store/apps/details?id=com.invoiceninja.app)
|
||||
* [Linux](https://github.com/invoiceninja/flutter-mobile)
|
||||
|
||||
## Desktop App
|
||||
* [MacOS](https://apps.apple.com/app/id1503970375)
|
||||
* [Windows](https://microsoft.com/en-us/p/invoice-ninja/9n3f2bbcfdr6)
|
||||
* [MacOS Desktop](https://snapcraft.io/invoiceninja)
|
||||
|
||||
|
||||
## Installation Options
|
||||
* [Docker File](https://hub.docker.com/r/invoiceninja/invoiceninja/)
|
||||
* [Cloudron](https://cloudron.io/store/com.invoiceninja.cloudronapp.html)
|
||||
* [Softaculous](https://www.softaculous.com/apps/ecommerce/Invoice_Ninja)
|
||||
|
||||
## Recommended Providers
|
||||
* [Stripe](https://stripe.com/)
|
||||
* [Postmark](https://postmarkapp.com/)
|
||||
|
||||
## Development
|
||||
* [API Documentation](https://app.swaggerhub.com/apis/invoiceninja/invoiceninja)
|
||||
* [APP Documentation](https://invoiceninja.github.io/)
|
||||
|
||||
## Quick Start
|
||||
|
||||
@ -67,30 +83,6 @@ user: user@example.com
|
||||
pass: password
|
||||
```
|
||||
|
||||
## Contribution guide.
|
||||
|
||||
Code Style to follow [PSR-2](https://www.php-fig.org/psr/psr-2/) standards.
|
||||
|
||||
All methods names to be in CamelCase
|
||||
|
||||
All variables names to be in snake_case
|
||||
|
||||
Where practical code should be strongly typed, ie your methods must return a type ie
|
||||
|
||||
`public function doThis() : void`
|
||||
|
||||
PHP >= 7.3 allows the return type Nullable so there should be no circumstance a type cannot be return by using the following:
|
||||
|
||||
`public function doThat() ?:string`
|
||||
|
||||
To improve chances of PRs being merged please include tests to ensure your code works well and integrates with the rest of the project.
|
||||
|
||||
## Documentation
|
||||
|
||||
API documentation is hosted using Swagger and can be found [HERE](https://app.swaggerhub.com/apis/invoiceninja/invoiceninja)
|
||||
|
||||
Installation, Configuration and Troubleshooting documentation can be found [HERE] (https://invoiceninja.github.io)
|
||||
|
||||
## Credits
|
||||
* [Hillel Coren](https://hillelcoren.com/)
|
||||
* [David Bomba](https://github.com/turbo124)
|
||||
|
@ -15,7 +15,7 @@
|
||||
zoom: 80%;
|
||||
}
|
||||
|
||||
html {
|
||||
html {
|
||||
margin: 0;
|
||||
padding-top: 1rem;
|
||||
padding-left: 4rem;
|
||||
@ -167,13 +167,13 @@
|
||||
|
||||
|
||||
#entity-details {
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#entity-details th {
|
||||
font-weight:normal;
|
||||
line-height: 1.5rem;
|
||||
font-weight:normal;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
#table-totals
|
||||
@ -224,37 +224,36 @@
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/** .repeating-header,
|
||||
.repeating-header-space, **/
|
||||
.repeating-footer,
|
||||
.repeating-footer-space {
|
||||
height: 150px;
|
||||
|
||||
}
|
||||
|
||||
.repeating-header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.repeating-footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
|
||||
}
|
||||
|
||||
#header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
}
|
||||
#header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
#footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
border-top: 1px solid #000;
|
||||
width: 82%;
|
||||
min-height:100px;
|
||||
padding-top: 0.5rem;
|
||||
margin-top: 40px;
|
||||
}
|
||||
#footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
border-top: 1px solid #000;
|
||||
width: 82%;
|
||||
min-height:100px;
|
||||
padding-top: 0.5rem;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
[data-element='product_table-product.description-td'], td {
|
||||
min-width:100%;
|
||||
@ -262,6 +261,8 @@
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
[data-ref="total_table-public_notes"] { font-weight: normal; }
|
||||
|
||||
/** Useful snippets, uncomment to enable. **/
|
||||
|
||||
/** Hide company logo **/
|
||||
@ -273,9 +274,6 @@
|
||||
/* Hide company address */
|
||||
/* #company-address > * { display: none } */
|
||||
|
||||
/* Hide public notes */
|
||||
[data-ref="total_table-public_notes"] { font-weight: normal; }
|
||||
|
||||
/* Hide terms label */
|
||||
/* [data-ref="total_table-terms-label"] { display: none } */
|
||||
|
||||
@ -318,7 +316,7 @@
|
||||
<div id="vendor-details"></div>
|
||||
|
||||
<div>
|
||||
<p class="entity-label" style="font-size:32px; color:#0096FF;">$entity_label</p>
|
||||
<p class="entity-label" style="font-size:32px; color:$primary_color;">$entity_label</p>
|
||||
<table id="entity-details" cellspacing="0" dir="ltr"></table>
|
||||
</div>
|
||||
</div>
|
||||
@ -372,12 +370,25 @@
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
document.querySelectorAll('#statement-invoice-table > thead > tr > th, #statement-payment-table > thead > tr > th, #statement-aging-table > thead > tr > th').forEach(t => {
|
||||
t.hidden = false;
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded",function(){document.querySelectorAll("#product-table > tbody > tr > td, #task-table > tbody > tr > td, #delivery-note-table > tbody > tr > td").forEach(t=>{if(""!==t.innerText){let e=t.getAttribute("data-ref").slice(0,-3);document.querySelector(`th[data-ref="${e}-th"]`).removeAttribute("hidden")}}),document.querySelectorAll("#product-table > tbody > tr > td, #task-table > tbody > tr > td, #delivery-note-table > tbody > tr > td").forEach(t=>{let e=t.getAttribute("data-ref").slice(0,-3);(e=document.querySelector(`th[data-ref="${e}-th"]`)).hasAttribute("hidden")&&""==t.innerText&&t.setAttribute("hidden","true")})},!1);</script><script>document.addEventListener("DOMContentLoaded",function(){document.querySelectorAll(`[data-state="encoded-html"]`).forEach(e=>e.innerHTML=e.innerText)},!1);
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// Clear up space a bit, if [product-table, tasks-table, delivery-note-table] isn't present.
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
let tables = [
|
||||
'product-table', 'task-table', 'delivery-note-table',
|
||||
'statement-invoice-table', 'statement-payment-table', 'statement-aging-table-totals',
|
||||
'statement-invoice-table-totals', 'statement-payment-table-totals', 'statement-aging-table',
|
||||
'client-details','vendor-details', 'swiss-qr'
|
||||
];
|
||||
|
||||
tables.forEach((tableIdentifier) => {
|
||||
console.log(document.getElementById(tableIdentifier));
|
||||
|
||||
document.getElementById(tableIdentifier)?.childElementCount === 0
|
||||
? document.getElementById(tableIdentifier).style.setProperty('display', 'none', 'important')
|
||||
: '';
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
Loading…
x
Reference in New Issue
Block a user