mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-27 11:41:09 -04:00
Merge branch 'master' of https://github.com/bytefury/crater
This commit is contained in:
@ -92,6 +92,12 @@ class CustomerProfileRequest extends FormRequest
|
|||||||
],
|
],
|
||||||
'shipping.fax' => [
|
'shipping.fax' => [
|
||||||
'nullable',
|
'nullable',
|
||||||
|
],
|
||||||
|
'customer_avatar' => [
|
||||||
|
'nullable',
|
||||||
|
'file',
|
||||||
|
'mimes:gif,jpg,png',
|
||||||
|
'max:20000'
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,7 +24,7 @@ class InvoiceResource extends JsonResource
|
|||||||
'paid_status' => $this->paid_status,
|
'paid_status' => $this->paid_status,
|
||||||
'tax_per_item' => $this->tax_per_item,
|
'tax_per_item' => $this->tax_per_item,
|
||||||
'discount_per_item' => $this->discount_per_item,
|
'discount_per_item' => $this->discount_per_item,
|
||||||
'notes' => $this->notes,
|
'notes' => $this->getNotes(),
|
||||||
'discount_type' => $this->discount_type,
|
'discount_type' => $this->discount_type,
|
||||||
'discount' => $this->discount,
|
'discount' => $this->discount,
|
||||||
'discount_val' => $this->discount_val,
|
'discount_val' => $this->discount_val,
|
||||||
|
|||||||
@ -23,7 +23,7 @@ class EstimateResource extends JsonResource
|
|||||||
'reference_number' => $this->reference_number,
|
'reference_number' => $this->reference_number,
|
||||||
'tax_per_item' => $this->tax_per_item,
|
'tax_per_item' => $this->tax_per_item,
|
||||||
'discount_per_item' => $this->discount_per_item,
|
'discount_per_item' => $this->discount_per_item,
|
||||||
'notes' => $this->notes,
|
'notes' => $this->getNotes(),
|
||||||
'discount' => $this->discount,
|
'discount' => $this->discount,
|
||||||
'discount_type' => $this->discount_type,
|
'discount_type' => $this->discount_type,
|
||||||
'discount_val' => $this->discount_val,
|
'discount_val' => $this->discount_val,
|
||||||
|
|||||||
@ -18,7 +18,7 @@ class PaymentResource extends JsonResource
|
|||||||
'id' => $this->id,
|
'id' => $this->id,
|
||||||
'payment_number' => $this->payment_number,
|
'payment_number' => $this->payment_number,
|
||||||
'payment_date' => $this->payment_date,
|
'payment_date' => $this->payment_date,
|
||||||
'notes' => $this->notes,
|
'notes' => $this->getNotes(),
|
||||||
'amount' => $this->amount,
|
'amount' => $this->amount,
|
||||||
'unique_hash' => $this->unique_hash,
|
'unique_hash' => $this->unique_hash,
|
||||||
'invoice_id' => $this->invoice_id,
|
'invoice_id' => $this->invoice_id,
|
||||||
|
|||||||
@ -16,7 +16,7 @@ trait GeneratesPdfTrait
|
|||||||
if ($pdf && file_exists($pdf['path'])) {
|
if ($pdf && file_exists($pdf['path'])) {
|
||||||
return response()->make(file_get_contents($pdf['path']), 200, [
|
return response()->make(file_get_contents($pdf['path']), 200, [
|
||||||
'Content-Type' => 'application/pdf',
|
'Content-Type' => 'application/pdf',
|
||||||
'Content-Disposition' => 'inline; filename="'.$pdf['file_name'].'.pdf"',
|
'Content-Disposition' => 'inline; filename="'.$pdf['file_name'].'"',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -68,6 +68,7 @@ return [
|
|||||||
["code" => "sv", "name" => "Svenska"],
|
["code" => "sv", "name" => "Svenska"],
|
||||||
["code" => "sk", "name" => "Slovak"],
|
["code" => "sk", "name" => "Slovak"],
|
||||||
["code" => "vi", "name" => "Tiếng Việt"],
|
["code" => "vi", "name" => "Tiếng Việt"],
|
||||||
|
["code" => "cs", "name" => "Czech"],
|
||||||
["code" => "el", "name" => "Greek"],
|
["code" => "el", "name" => "Greek"],
|
||||||
["code" => "hr", "name" => "Crotian"],
|
["code" => "hr", "name" => "Crotian"],
|
||||||
],
|
],
|
||||||
|
|||||||
@ -106,6 +106,14 @@ class CurrenciesTableSeeder extends Seeder
|
|||||||
'thousand_separator' => ',',
|
'thousand_separator' => ',',
|
||||||
'decimal_separator' => '.',
|
'decimal_separator' => '.',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'name' => 'Nepali Rupee',
|
||||||
|
'code' => 'NPR',
|
||||||
|
'symbol' => 'रू',
|
||||||
|
'precision' => '2',
|
||||||
|
'thousand_separator' => ',',
|
||||||
|
'decimal_separator' => '.',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'name' => 'Indian Rupee',
|
'name' => 'Indian Rupee',
|
||||||
'code' => 'INR',
|
'code' => 'INR',
|
||||||
@ -575,6 +583,15 @@ class CurrenciesTableSeeder extends Seeder
|
|||||||
'thousand_separator' => ',',
|
'thousand_separator' => ',',
|
||||||
'decimal_separator' => '.',
|
'decimal_separator' => '.',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'name' => 'Macedonian Denar',
|
||||||
|
'code' => 'MKD',
|
||||||
|
'symbol' => 'ден',
|
||||||
|
'precision' => '0',
|
||||||
|
'thousand_separator' => '.',
|
||||||
|
'decimal_separator' => ',',
|
||||||
|
'swap_currency_symbol' => true,
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
16
readme.md
16
readme.md
@ -54,20 +54,24 @@ Join the Crater discord server to discuss:
|
|||||||
- [x] Add and Use Custom Fields on Invoices & Estimates.
|
- [x] Add and Use Custom Fields on Invoices & Estimates.
|
||||||
- [x] Multiple Companies
|
- [x] Multiple Companies
|
||||||
- [x] Recurring Invoices
|
- [x] Recurring Invoices
|
||||||
- [ ] Modules
|
- [x] Customer Portal
|
||||||
|
- [x] Accept Payments (Stripe Integration)
|
||||||
|
- [x] White Labeling (Easy Invoice, Email & Consumer Portal Theme customisation)
|
||||||
|
- [ ] Modules API
|
||||||
- [ ] Blockchain Integration
|
- [ ] Blockchain Integration
|
||||||
- [ ] Web 3.0 Accounting
|
- [ ] Web 3.0 Accounting
|
||||||
- [ ] White Labeling (Easy Invoice, Email & Consumer Portal Theme customisation)
|
- [ ] Vendors & Bills
|
||||||
- [ ] Vendors, Inventory & Bills
|
- [ ] Inventory Management
|
||||||
- [ ] Payment Reminders
|
- [ ] Payment Reminders
|
||||||
- [ ] Improve Accessibility
|
- [ ] Improve Accessibility
|
||||||
- [ ] Customer Portal
|
|
||||||
- [ ] Accept Payments (Stripe Integration)
|
|
||||||
- [ ] Debit & Credit Notes
|
- [ ] Debit & Credit Notes
|
||||||
|
- [ ] Time Tracking
|
||||||
|
- [ ] Full service Payroll
|
||||||
|
|
||||||
|
|
||||||
## Copyright
|
## Copyright
|
||||||
|
|
||||||
© 2021 Crater Invoice, Inc.
|
© 2022 Crater Invoice, Inc.
|
||||||
|
|
||||||
**Special thanks to:**
|
**Special thanks to:**
|
||||||
|
|
||||||
|
|||||||
2
resources/sass/crater.scss
vendored
2
resources/sass/crater.scss
vendored
@ -41,7 +41,7 @@
|
|||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
src: url("/fonts/Poppins-Semibold.ttf") format("truetype");
|
src: url("/fonts/Poppins-SemiBold.ttf") format("truetype");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default Theme
|
// Default Theme
|
||||||
|
|||||||
@ -85,21 +85,21 @@
|
|||||||
"select_state": "Sélectionnez l'état",
|
"select_state": "Sélectionnez l'état",
|
||||||
"select_country": "Choisissez le pays",
|
"select_country": "Choisissez le pays",
|
||||||
"select_city": "Sélectionnez une ville",
|
"select_city": "Sélectionnez une ville",
|
||||||
"street_1": "Rue 1",
|
"street_1": "Rue, voie, boite postale",
|
||||||
"street_2": "Rue # 2",
|
"street_2": "Bâtiment, étage, lieu-dit, complément,...",
|
||||||
"action_failed": "Action : échoué",
|
"action_failed": "Action : échoué",
|
||||||
"retry": "Réessayez",
|
"retry": "Réessayez",
|
||||||
"choose_note": "Choisissez une note de bas de page",
|
"choose_note": "Choisissez une note de bas de page",
|
||||||
"no_note_found": "Aucune note de bas de page trouvée",
|
"no_note_found": "Aucune note de bas de page trouvée",
|
||||||
"insert_note": "Insérer une note",
|
"insert_note": "Insérer une note",
|
||||||
"copied_pdf_url_clipboard": "L'adresse du PDF a été copiée.",
|
"copied_pdf_url_clipboard": "L'adresse du PDF a été copiée.",
|
||||||
"copied_url_clipboard": "Copied url to clipboard!",
|
"copied_url_clipboard": "URL copiée vers le presse-papier!",
|
||||||
"docs": "Documents",
|
"docs": "Documents",
|
||||||
"do_you_wish_to_continue": "Voulez-vous continuer ?",
|
"do_you_wish_to_continue": "Voulez-vous continuer ?",
|
||||||
"note": "Note de bas de page",
|
"note": "Note de bas de page",
|
||||||
"pay_invoice": "Pay Invoice",
|
"pay_invoice": "Payer facture",
|
||||||
"login_successfully": "Logged in successfully!",
|
"login_successfully": "Identifié avec succès!",
|
||||||
"logged_out_successfully": "Logged out successfully"
|
"logged_out_successfully": "Déconnecté avec succès"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"select_year": "Sélectionnez l'année",
|
"select_year": "Sélectionnez l'année",
|
||||||
@ -141,7 +141,7 @@
|
|||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
"percent": "Pourcentage",
|
"percent": "Pourcentage",
|
||||||
"compound_tax": "Taxe empilée"
|
"compound_tax": "Taxe composée"
|
||||||
},
|
},
|
||||||
"global_search": {
|
"global_search": {
|
||||||
"search": "Rechercher",
|
"search": "Rechercher",
|
||||||
@ -207,10 +207,10 @@
|
|||||||
"new_customer": "Nouveau client",
|
"new_customer": "Nouveau client",
|
||||||
"edit_customer": "Modifier le client",
|
"edit_customer": "Modifier le client",
|
||||||
"basic_info": "Informations de base",
|
"basic_info": "Informations de base",
|
||||||
"portal_access": "Portal Access",
|
"portal_access": "Accès Portail",
|
||||||
"portal_access_text": "Would you like to allow this customer to login to the Customer Portal?",
|
"portal_access_text": "Souhaitez vous autoriser ce client à se connecter au Portail Client ?",
|
||||||
"portal_access_url": "Customer Portal Login URL",
|
"portal_access_url": "URL de connexion Portail Client",
|
||||||
"portal_access_url_help": "Please copy & forward the above given URL to your customer for providing access.",
|
"portal_access_url_help": "Veuillez copiez et envoyez le lien ci-dessus au client pour lui fournir l'accès au portail.",
|
||||||
"billing_address": "Adresse de facturation",
|
"billing_address": "Adresse de facturation",
|
||||||
"shipping_address": "Adresse de livraison",
|
"shipping_address": "Adresse de livraison",
|
||||||
"copy_billing_address": "Copier depuis l'adresse de facturation",
|
"copy_billing_address": "Copier depuis l'adresse de facturation",
|
||||||
@ -230,7 +230,7 @@
|
|||||||
"confirm_delete": "Vous ne pourrez pas récupérer ce client et les devis, factures et paiements associés. | Vous ne serez pas en mesure de récupérer ces clients et les devis, factures et paiements associés.",
|
"confirm_delete": "Vous ne pourrez pas récupérer ce client et les devis, factures et paiements associés. | Vous ne serez pas en mesure de récupérer ces clients et les devis, factures et paiements associés.",
|
||||||
"created_message": "Client créé",
|
"created_message": "Client créé",
|
||||||
"updated_message": "Client mis à jour",
|
"updated_message": "Client mis à jour",
|
||||||
"address_updated_message": "Address Information Updated succesfully",
|
"address_updated_message": "Adresse mise à jour avec succès",
|
||||||
"deleted_message": "Client supprimé | Clients supprimés",
|
"deleted_message": "Client supprimé | Clients supprimés",
|
||||||
"edit_currency_not_allowed": "Impossible de changer de devise une fois les transactions créées."
|
"edit_currency_not_allowed": "Impossible de changer de devise une fois les transactions créées."
|
||||||
},
|
},
|
||||||
@ -264,8 +264,8 @@
|
|||||||
},
|
},
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"title": "Devis",
|
"title": "Devis",
|
||||||
"accept_estimate": "Accept Estimate",
|
"accept_estimate": "Accepter devis",
|
||||||
"reject_estimate": "Reject Estimate",
|
"reject_estimate": "Rejeter devis",
|
||||||
"estimate": "Devis | Devis",
|
"estimate": "Devis | Devis",
|
||||||
"estimates_list": "Liste des devis",
|
"estimates_list": "Liste des devis",
|
||||||
"days": "{days} jours",
|
"days": "{days} jours",
|
||||||
@ -357,10 +357,10 @@
|
|||||||
},
|
},
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "Factures",
|
"title": "Factures",
|
||||||
"download": "Download",
|
"download": "Télécharger",
|
||||||
"pay_invoice": "Pay Invoice",
|
"pay_invoice": "Payer facture",
|
||||||
"invoices_list": "Liste des factures",
|
"invoices_list": "Liste des factures",
|
||||||
"invoice_information": "Invoice Information",
|
"invoice_information": "Informations sur la facture",
|
||||||
"days": "{days} jours",
|
"days": "{days} jours",
|
||||||
"months": "{months} mois",
|
"months": "{months} mois",
|
||||||
"years": "{years} années",
|
"years": "{years} années",
|
||||||
@ -806,7 +806,7 @@
|
|||||||
"address_information": "Address Information"
|
"address_information": "Address Information"
|
||||||
},
|
},
|
||||||
"address_information": {
|
"address_information": {
|
||||||
"section_description": " You can update Your Address information using form below."
|
"section_description": " Vous pouvez mettre à jour vos informations d'adresse via le formulaire ci dessous."
|
||||||
},
|
},
|
||||||
"title": "Paramètres",
|
"title": "Paramètres",
|
||||||
"setting": "Paramètres | Paramètres",
|
"setting": "Paramètres | Paramètres",
|
||||||
@ -1173,8 +1173,8 @@
|
|||||||
"discount_setting": "Réglage de remise",
|
"discount_setting": "Réglage de remise",
|
||||||
"discount_per_item": "Remise par article",
|
"discount_per_item": "Remise par article",
|
||||||
"discount_setting_description": "Activez cette option si vous souhaitez détailler les remises par article. Par défaut, les remises sont ajoutées au sous-total.",
|
"discount_setting_description": "Activez cette option si vous souhaitez détailler les remises par article. Par défaut, les remises sont ajoutées au sous-total.",
|
||||||
"expire_public_links": "Automatically Expire Public Links",
|
"expire_public_links": "Expiration automatique des liens publics",
|
||||||
"expire_setting_description": "Specify whether you would like to expire all the links sent by application to view invoices, estimates & payments, etc after a specified duration.",
|
"expire_setting_description": "Spécifiez si vous souhaitez faire expirer tous les liens publiques envoyés par l'application pour consulter les factures, devis, paiements,... après une durée spécifique.",
|
||||||
"save": "Enregistrer",
|
"save": "Enregistrer",
|
||||||
"preference": "Préférence | Préférences",
|
"preference": "Préférence | Préférences",
|
||||||
"general_settings": "Modifiez ici les paramètres globaux de Crater.",
|
"general_settings": "Modifiez ici les paramètres globaux de Crater.",
|
||||||
@ -1296,16 +1296,16 @@
|
|||||||
"invalid_disk_credentials": "Informations d'identification non valides du stockage sélectionné"
|
"invalid_disk_credentials": "Informations d'identification non valides du stockage sélectionné"
|
||||||
},
|
},
|
||||||
"taxations": {
|
"taxations": {
|
||||||
"add_billing_address": "Enter Billing Address",
|
"add_billing_address": "Entrez l'adresse de facturation",
|
||||||
"add_shipping_address": "Enter Shipping Address",
|
"add_shipping_address": "Entrez l'adresse de livraison",
|
||||||
"add_company_address": "Enter Company Address",
|
"add_company_address": "Entrez l'adresse de la société",
|
||||||
"modal_description": "The information below is required in order to fetch sales tax.",
|
"modal_description": "Les informations ci-dessous sont requises afin de récupérer les taxes de vente.",
|
||||||
"add_address": "Add Address for fetching sales tax.",
|
"add_address": "Ajoutez une adresse pour récupérer les taxes de vente.",
|
||||||
"address_placeholder": "Example: 123, My Street",
|
"address_placeholder": "Exemple: 123, My Street",
|
||||||
"city_placeholder": "Example: Los Angeles",
|
"city_placeholder": "Exemple: Los Angeles",
|
||||||
"state_placeholder": "Example: CA",
|
"state_placeholder": "Exemple: CA",
|
||||||
"zip_placeholder": "Example: 90024",
|
"zip_placeholder": "Exemple: 90024",
|
||||||
"invalid_address": "Please provide valid address details."
|
"invalid_address": "Veuillez fournir une adresse valide."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
@ -1465,17 +1465,17 @@
|
|||||||
"not_allowed": "Non autorisé",
|
"not_allowed": "Non autorisé",
|
||||||
"login_invalid_credentials": "Ces identifiants ne correspondent pas à nos enregistrements.",
|
"login_invalid_credentials": "Ces identifiants ne correspondent pas à nos enregistrements.",
|
||||||
"enter_valid_cron_format": "Veuillez entrer une tâche Cron valide",
|
"enter_valid_cron_format": "Veuillez entrer une tâche Cron valide",
|
||||||
"email_could_not_be_sent": "Email could not be sent to this email address.",
|
"email_could_not_be_sent": "L'Email n'a pas pu être envoyé vers cette adresse email.",
|
||||||
"invalid_address": "Please enter a valid address.",
|
"invalid_address": "Veuillez spécifier une adresse valide.",
|
||||||
"invalid_key": "Please enter valid key.",
|
"invalid_key": "Veuillez spécifier une clé valide.",
|
||||||
"invalid_state": "Please enter a valid state.",
|
"invalid_state": "Veuillez spécifier un état valide.",
|
||||||
"invalid_city": "Please enter a valid city.",
|
"invalid_city": "Veuillez spécifier une ville valide.",
|
||||||
"invalid_postal_code": "Please enter a valid zip.",
|
"invalid_postal_code": "Veuillez spécifier un code postal valide.",
|
||||||
"invalid_format": "Please enter valid query string format.",
|
"invalid_format": "Veuillez spécifier un format de requête valide.",
|
||||||
"api_error": "Server not responding.",
|
"api_error": "Le serveur ne répond plus.",
|
||||||
"feature_not_enabled": "Feature not enabled.",
|
"feature_not_enabled": "Fonctionnalité inactive.",
|
||||||
"request_limit_met": "Api request limit exceeded.",
|
"request_limit_met": "Limite de requêtes API dépassée.",
|
||||||
"address_incomplete": "Incomplete Address"
|
"address_incomplete": "Adresse incomplète"
|
||||||
},
|
},
|
||||||
"pdf_estimate_label": "Devis",
|
"pdf_estimate_label": "Devis",
|
||||||
"pdf_estimate_number": "N°",
|
"pdf_estimate_number": "N°",
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import cs from './cs.json'
|
||||||
import en from './en.json'
|
import en from './en.json'
|
||||||
import fr from './fr.json'
|
import fr from './fr.json'
|
||||||
import es from './es.json'
|
import es from './es.json'
|
||||||
@ -18,6 +19,7 @@ import el from './el.json'
|
|||||||
import hr from './hr.json'
|
import hr from './hr.json'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
cs,
|
||||||
en,
|
en,
|
||||||
fr,
|
fr,
|
||||||
es,
|
es,
|
||||||
|
|||||||
@ -73,6 +73,12 @@ test('customer profile request validation rules', function () {
|
|||||||
],
|
],
|
||||||
'shipping.fax' => [
|
'shipping.fax' => [
|
||||||
'nullable',
|
'nullable',
|
||||||
|
],
|
||||||
|
'customer_avatar' => [
|
||||||
|
'nullable',
|
||||||
|
'file',
|
||||||
|
'mimes:gif,jpg,png',
|
||||||
|
'max:20000'
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
$request->rules()
|
$request->rules()
|
||||||
|
|||||||
Reference in New Issue
Block a user