Degerli ustadlar, oncelikle Laravel ile 2 gun once tanistigimi soyleerek baslamak istiyorum. Bir uygulama ile ugrasiyorum varolan biri tarafindan programlanmis bir uygulama, ben bunun uzerinde bazi degisiklikler yapmak istiyorum. Amacim bu Laravel nedense bende bilmedigim bir heyecan dogurdu ogrenmek istiyorum ve ileride saglam islere imza atmak istiyorum.
Bircok konuda kafamda onlarca soru var aslinda forumlari okumaya calisiyorum iki gundur yogun bir sekilde ve elini opmem gereken insanlara sormak o sekilde ogrenmek cok daha mantikli diye dusundum. Bastan soylemek istiyorum ogrenmeye ac biriyim ve basinizi bolca agritmak icin can atiyorum. Umarim bu kardesinizi bilgilerinizle aydinlatir ogrenme heveslisi birini mutlu edersiniz. Her halukarda zaman ayirip okumaniz bile benim icin degerlidir. Herkese bastan cok tesekkur etmek istiyorum.
Aslinda sizler icin cok basit olabilecek bir soru.
Uygulamada Raporlama bolumu var satilan urun ne zaman satildigi fatura numarasi tutari ve musteri adi. Sistem zaten bu raporlamalari yapiyor hatta benim istedigim raporlamada yapiliyor sadece ben biraz mantigini yada sira duzenini degistirecegim ve benim istedigim gibi olacak.
Uygulamada Moduller klasorunun icinde Rapor diye bir klasor var hersey bunun icinde zaten mevcut. Ben bu Rapor klasorunun adini degistirip birde goruntu ve sorgu cesidini degistirdigimde istedigim hali alacak. Sadece mevcut raporlama tarih yazinca cikti veriyor ben musteri adinin yazinca ayni ciktilari almak istiyorum.
Rapor klasorunun altindaki Controllers, Providers, Repositories, Validators, Views ve route.php nasil cogaltip fonksiyonlarda degisiklik yapmadan sadece sorguyu degistirerek en mantikli ve hizli sekilde nasil istedigim bir module haline getirebilirim ?
Biraz daha detay olmasi acisindan raporlamada satilan urune gore raporlama yapiliyor hangi urun kimlere kac kez satilmis vs.vs.
Ben musterinin adini yazdigimda bu musteri ne zaman ne almis kac para tutmus bu sekilde listeleme yapmak istiyorum.
Route.php de atanmis route lardan benim kullanmak istedigim yada kopyalamak istedigim kisim su :
Route::get('reports/item_sales', array('uses' => 'ItemSalesReportController@index', 'as' => 'reports.itemSales'));
Route::post('reports/item_sales', array('uses' => 'ItemSalesReportController@ajaxRunReport', 'as' => 'reports.itemSales.ajax.run'));
Su da ItemSalesReportController.php :
namespace Modules\Reports\Controllers;
use Input;
use Response;
use View;
use Libraries\DateFormatter;
class ItemSalesReportController extends \BaseController {
/**
* Item sales report repository
* @var ItemSalesReportRepository
*/
protected $itemSalesReport;
/**
* Date range validator
* @var ReportValidator
*/
protected $validator;
/**
* Dependency injection
* @param ItemSalesReportRepository $itemSalesReport
* @param ReportValidator $validator
*/
public function __construct($itemSalesReport, $validator)
{
$this->itemSalesReport = $itemSalesReport;
$this->validator = $validator;
}
/**
* Display the report interface
* @return View
*/
public function index()
{
return View::make('reports.item_sales');
}
/**
* Run the report and display the results
* @return View
*/
public function ajaxRunReport()
{
$validator = $this->validator->getDateRangeValidator(Input::all());
if ($validator->fails())
{
return Response::json(array(
'success' => false,
'errors' => $validator->messages()->toArray()
), 400);
}
return View::make('reports._item_sales')
->with('results', $this->itemSalesReport->getResults(DateFormatter::unformat(Input::get('from_date')), DateFormatter::unformat(Input::get('to_date'))));
}
}
ModuleProvider.php de su sekilde :
namespace Modules\Reports\Providers;
use Illuminate\Support\ServiceProvider;
class ModuleProvider extends ServiceProvider {
public function register()
{
$this->app->bind('ItemSalesReportRepository', 'Modules\Reports\Repositories\ItemSalesReportRepository');
$this->app->bind('PaymentsCollectedReportRepository', 'Modules\Reports\Repositories\PaymentsCollectedReportRepository');
$this->app->bind('RevenueByClientReportRepository', 'Modules\Reports\Repositories\RevenueByClientReportRepository');
$this->app->bind('TaxSummaryReportRepository', 'Modules\Reports\Repositories\TaxSummaryReportRepository');
$this->app->bind('ReportValidator', 'Modules\Reports\Validators\ReportValidator');
$this->app->bind('ItemSalesReportController', function($app)
{
return new Modules\Reports\Controllers\ItemSalesReportController(
$app->make('ItemSalesReportRepository'),
$app->make('ReportValidator')
);
});
$this->app->bind('PaymentsCollectedReportController', function($app)
{
return new Modules\Reports\Controllers\PaymentsCollectedReportController(
$app->make('PaymentsCollectedReportRepository'),
$app->make('ReportValidator')
);
});
$this->app->bind('RevenueByClientReportController', function($app)
{
return new \Modules\Reports\Controllers\RevenueByClientReportController(
$app->make('RevenueByClientReportRepository'),
$app->make('ReportValidator')
);
});
$this->app->bind('TaxSummaryReportController', function($app)
{
return new \Modules\Reports\Controllers\TaxSummaryReportController(
$app->make('TaxSummaryReportRepository'),
$app->make('ReportValidator')
);
});
}
}
ItemSalesReportRepository.php De Su sekilde :
namespace Modules\Reports\Repositories;
use Libraries\CurrencyFormatter;
use Libraries\NumberFormatter;
use Modules\Invoices\Models\InvoiceItem;
class ItemSalesReportRepository {
/**
* Get the report results
* @param string $fromDate
* @param string $toDate
* @return array
*/
public function getResults($fromDate, $toDate)
{
$results = array();
$items = InvoiceItem::byDateRange($fromDate, $toDate)->orderBy('name')->get();
foreach ($items as $item)
{
$results[$item->name]['items'][] = array(
'client_name' => $item->invoice->client->name,
'invoice_number' => $item->invoice->number,
'date' => $item->invoice->formatted_created_at,
'price' => $item->formatted_price,
'quantity' => $item->formatted_quantity,
'total' => $item->amount->formatted_total
);
if (isset($results[$item->name]['totals']))
{
$results[$item->name]['totals']['quantity'] += $item->quantity;
$results[$item->name]['totals']['total'] += $item->amount->total;
}
else
{
$results[$item->name]['totals']['quantity'] = $item->quantity;
$results[$item->name]['totals']['total'] = $item->amount->total;
}
}
foreach ($results as $key => $result)
{
$results[$key]['totals']['quantity'] = NumberFormatter::format($results[$key]['totals']['quantity']);
$results[$key]['totals']['total'] = CurrencyFormatter::format($results[$key]['totals']['total']);
}
return $results;
}
}
Birde View klasorunun altinda _item_sales.blade.php ve item_sales.blade.php var listeyi gosteren.
item_sales.blade.php de su sekilde
@extends('layouts.master')
@section('jscript')
@include('layouts._datemask')
<script type="text/javascript">
$(function() {
$('#btn-submit').click(function() {
$.post("{{ route('reports.itemSales.ajax.run') }}", {
from_date: $('#from_date').val(),
to_date: $('#to_date').val()
}).done(function(response) {
clearErrors();
$('#report-results').html(response);
}).fail(function(response) {
showErrors($.parseJSON(response.responseText).errors, '#form-validation-placeholder');
});
});
$("#from_date").inputmask("{{ Config::get('datepickerFormat') }}");
$("#to_date").inputmask("{{ Config::get('datepickerFormat') }}");
});
</script>
@stop
@section('content')
<aside class="right-side">
<section class="content-header">
<h1 class="pull-left">
{{ trans('item_sales') }}
</h1>
<div class="pull-right">
<button class="btn btn-primary" id="btn-submit">{{ trans('run_report') }}</button>
</div>
<div class="clearfix"></div>
</section>
<section class="content">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">{{ trans('options') }}</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-xs-2">
<label>{{ trans('from_date') }}</label>
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
{{ Form::text('from_date', null, array('id' => 'from_date', 'class' => 'form-control')) }}
</div>
</div>
<div class="col-xs-2">
<label>{{ trans('to_date') }}</label>
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
{{ Form::text('to_date', null, array('id' => 'to_date', 'class' => 'form-control')) }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="report-results">
</div>
</section>
</aside>
@stop
Bende aylikrapor diye bir module haline getirip dedigim sekilde listelemek istiyorum. Ne yapmam, Nasil yapmam, Hangi yollari izlemem gerekiyor. Sistemin saglikli olmasi iyi bir netice icin nasil yapabilirim beni aydinlatirsaniz cok mutlu olurum.
tekrar hepinize ayirdiginiz zaman icin cok tesekkur ediyorum.