Conversie codeigniter 4
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by Pensare Software.
|
||||
* User: Theo Weijmer
|
||||
* Date: 23/01/2018
|
||||
* Time: 15:58
|
||||
*/
|
||||
|
||||
|
||||
class Invoice extends BaseModel {
|
||||
|
||||
public function project()
|
||||
{
|
||||
return $this->belongsTo( 'Project' );
|
||||
}
|
||||
|
||||
public function payments()
|
||||
{
|
||||
return $this->hasMany( 'Payment' );
|
||||
}
|
||||
|
||||
public function vat()
|
||||
{
|
||||
return $this->belongsTo( 'Vat' );
|
||||
}
|
||||
|
||||
public static function invoicePerYear( $projectID, $year, $thatYear = TRUE )
|
||||
{
|
||||
$invoices = Invoice::selectRAW( 'SUM(invoiceamount * ( 1 +(vatrate / 100))) AS invoicetotal' )
|
||||
->join( 'vats', 'vats.id', '=', 'invoices.vat_id' )
|
||||
->whereProjectId( $projectID );
|
||||
|
||||
if ( $thatYear )
|
||||
{
|
||||
$invoices = $invoices->whereRaw( "YEAR(invoicedate) = {$year}" );
|
||||
}
|
||||
else
|
||||
{
|
||||
$invoices = $invoices->whereRaw( "YEAR(invoicedate) != {$year}" );
|
||||
}
|
||||
|
||||
if ( $invoices->count() == 0 ) return 0;
|
||||
|
||||
$invoices = $invoices->first();
|
||||
|
||||
return $invoices->invoicetotal;
|
||||
}
|
||||
|
||||
public static function saveInvoice( $invoiceID, $invoice )
|
||||
{
|
||||
$invoice = (array) $invoice;
|
||||
|
||||
if ( $invoiceID == 0 )
|
||||
{
|
||||
$invoice = Invoice::create( $invoice );
|
||||
$invoiceID = $invoice['id'];
|
||||
}
|
||||
else
|
||||
{
|
||||
Invoice::whereId( $invoiceID )->update( $invoice );
|
||||
}
|
||||
|
||||
return $invoiceID;
|
||||
}
|
||||
|
||||
public static function getInvoiced( $year, $orderType='invoicedate', $orderDirection='DESC' )
|
||||
{
|
||||
$invoiced = Invoice::selectRaw('invoicenumber, PRJ.projectname, projectnumber, CUS.name, invoicedate, CUS.name, ROUND(invoiceamount, 0) AS invoiceamount')
|
||||
->join('projects AS PRJ', 'PRJ.id', '=', 'invoices.project_id')
|
||||
->join('customers AS CUS', 'CUS.id', '=', 'PRJ.customer_id')
|
||||
->whereRaw("DATE_FORMAT(invoicedate, '%Y') = {$year}")
|
||||
->orderBy($orderType, $orderDirection)
|
||||
->get();
|
||||
|
||||
return $invoiced;
|
||||
}
|
||||
|
||||
public static function getInvoicedPerYearPerProject($projectID)
|
||||
{
|
||||
$invoiced = Invoice::selectRaw('ROUND(COALESCE(SUM(invoiceamount), 0), 0) AS invoiced, YEAR(invoicedate) AS invoiceyear')
|
||||
->where('project_id', $projectID)
|
||||
->groupByRaw('YEAR(invoicedate)')
|
||||
->orderByRaw('YEAR(invoicedate)')
|
||||
->get();
|
||||
|
||||
return $invoiced;
|
||||
}
|
||||
|
||||
public static function getTotalsOutstandingPerProject($archive = true)
|
||||
{
|
||||
$sql = "
|
||||
SELECT
|
||||
PRJ.id,
|
||||
projectnumber,
|
||||
projectname,
|
||||
SUM(invoiced) AS invoiced,
|
||||
SUM(payment) AS payment,
|
||||
revenues,
|
||||
costs,
|
||||
COALESCE(payedcosts, 0) AS payedcosts
|
||||
FROM (
|
||||
SELECT
|
||||
project_id,
|
||||
ROUND(SUM(invoiceamount * (1 + (vatrate / 100))), 0) AS invoiced,
|
||||
payment
|
||||
FROM
|
||||
invoices INV
|
||||
JOIN vats VAT ON VAT.id = INV.vat_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROUND(COALESCE(SUM(paymentamount), 0), 0) AS payment,
|
||||
invoice_id
|
||||
FROM
|
||||
payments
|
||||
GROUP BY
|
||||
invoice_id) AS Q1 ON INV.id = Q1.invoice_id
|
||||
GROUP BY
|
||||
INV.id) Q2
|
||||
JOIN projects PRJ ON PRJ.id = Q2.project_id
|
||||
JOIN (
|
||||
SELECT
|
||||
ROUND((own_revenue + other_revenue + costs) * (1 + (vatrate / 100)), 0) revenues,
|
||||
ROUND(costs * (1 + (vatrate / 100)), 0) costs,
|
||||
OFF.project_id
|
||||
FROM
|
||||
offers OFF
|
||||
JOIN projects PRJ ON PRJ.id = OFF.project_id
|
||||
JOIN vats VAT ON VAT.id = PRJ.vat_id) Q3 ON Q3.project_id = PRJ.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
SUM(costs) AS payedcosts,
|
||||
project_id
|
||||
FROM
|
||||
projectcosts
|
||||
GROUP BY
|
||||
project_id) Q4 ON Q4.project_id = PRJ.id ";
|
||||
|
||||
if ($archive === false) {
|
||||
$sql .= "WHERE PRJ.archive = 'F' ";
|
||||
}
|
||||
|
||||
$sql .= "GROUP BY PRJ.id";
|
||||
|
||||
$db = \Config\Database::connect();
|
||||
return $db->query($sql)->getResult();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user