• 04-12-2021, 23:02:25
    #1
    Herkese iyi forumlar.
    Elimizdeki sistemde sepet içeriğini arrayde tutup fatura bilgilerini de tablolarda tutan bir sistem var fakat şöyle bir sorunumuz mevcut.
    Faturada %18 ve %8 içerikli 2den fazla içerik olduğunda invoice sayfasında ayrı ayrı her üründe gösteriyoruz bunda sorun yok fakat en altta %8 %18 gibi dilimine göre toplam vergiyi gösteremiyoruz.

    Sadece 8 ve 18 değil o yüzden 8 e ve 18 e göre filtre yapamıyoruz çünkü Almanya da var sistemde kategoriye göre vergiler değişiyor.

    Arrayde toplu gelen veriden filtre ile toplamak adına hazır kod gibi bir isteğim yok ( olursa güzel olur tabi) yol gösterici fikirlerinize açığım.
  • 04-12-2021, 23:16:54
    #2
    Ayrıca ücretle destek verebilecek varsa onu da sağlayabiliriz. Hiç problem değil
  • 04-12-2021, 23:24:27
    #3
    {"totalQty":3,"totalPrice":167.4000000000000056843 41886080801486968994140625,"items":{"233":{"qty":1 ,"size_key":0,"size_qty":"","size_price":"","size" :"","color":"","stock":7,"price":110,"item":{"id": 233,"user_id":45,"slug":"deneme-komisyon-2-jna0360b0t","name":"Deneme Komisyon -2","capacity":"1250","prodkg":"25","category_id":1 2,"subcategory_id":null,"photo":"hZNSWkAIA3E3.jpg" ,"size":"","size_qty":"","size_price":"","color":" ","price":110,"stock":8,"type":"Physical","file":n ull,"link":null,"license":"","license_qty":"","mea sure":null,"whole_sell_qty":"","whole_sell_discoun t":"","attributes":null,"category":{"id":12,"name" :"Toys & Hobbies","slug":"toys-and-hobbies","status":1,"photo":"1557807214sports.png" ,"is_featured":1,"image":"1568709042f9.jpg","commi ssion":10,"commission_type":"fixed"}},"license":"" ,"dp":"0","keys":"","values":"","item_price":110," cattax":19},"206":{"qty":1,"size_key":0,"size_qty" :"","size_price":"","size":"","color":"","stock":4 7,"price":56.1000000000000014210854715202003717422 4853515625,"item":{"id":206,"user_id":36,"slug":"a sd6-mfc8057xfy","name":"asd6","capacity":"10500","prod kg":"5","category_id":12,"subcategory_id":null,"ph oto":"Z6M9fg4eN5QA.jpg","size":"","size_qty":"","s ize_price":"","color":"","price":56.10000000000000 142108547152020037174224853515625,"stock":48,"type ":"Physical","file":null,"link":null,"license":"", "license_qty":"","measure":null,"whole_sell_qty":" ","whole_sell_discount":"","attributes":null,"cate gory":{"id":12,"name":"Toys & Hobbies","slug":"toys-and-hobbies","status":1,"photo":"1557807214sports.png" ,"is_featured":1,"image":"1568709042f9.jpg","commi ssion":10,"commission_type":"fixed"}},"license":"" ,"dp":"0","keys":"","values":"","item_price":56.10 000000000000142108547152020037174224853515625,"cat tax":19},"225":{"qty":1,"size_key":0,"size_qty":"" ,"size_price":"","size":"","color":"","stock":null ,"price":1.300000000000000044408920985006261616945 2667236328125,"item":{"id":225,"user_id":0,"slug": "testlerim100-eew6068eo9","name":"testlerim100","capacity":"1000 ","prodkg":"1","category_id":4,"subcategory_id":nu ll,"photo":"EMLBZamLgM.png","size":"","size_qty":" ","size_price":"","color":"","price":1.30000000000 00000444089209850062616169452667236328125,"stock": null,"type":"Physical","file":null,"link":null,"li cense":"","license_qty":"","measure":null,"whole_s ell_qty":"","whole_sell_discount":"","attributes": null},"license":"","dp":"0","keys":"","values":"", "item_price":1.30000000000000004440892098500626161 69452667236328125,"cattax":15}}}

    Örnek array
  • 05-12-2021, 02:26:52
    #4
    array_reduce fonksiyonunu kullanabilirsiniz.

    $items = [
        0 => ['price' => 100, 'tax' => 8],
        1 => ['price' => 100, 'tax' => 18],
        2 => ['price' => 100, 'tax' => 15],
    ];
    
    $toplamVergi = array_reduce($items, function($prev, $item){
        return $prev + ($item['price'] * $item['tax'] / 100);
    });
    
    echo $toplamVergi;
  • 05-12-2021, 05:22:15
    #5
    ghergedan adlı üyeden alıntı: mesajı görüntüle
    array_reduce fonksiyonunu kullanabilirsiniz.

    $items = [
        0 => ['price' => 100, 'tax' => 8],
        1 => ['price' => 100, 'tax' => 18],
        2 => ['price' => 100, 'tax' => 15],
    ];
    
    $toplamVergi = array_reduce($items, function($prev, $item){
        return $prev + ($item['price'] * $item['tax'] / 100);
    });
    
    echo $toplamVergi;
    Yardımınız için teşekkür ederim. Toplam vergiyi alabiliyoruz sorunumuz toplam %8 lik vergi
    Toplam %18lik vergi.

    1 faturada birden fazla vergi türü içeren ürün olduğunda durum karışıyor.
  • 05-12-2021, 05:25:46
    #6
    Örnek Görseldeki vergi dökümü kısmı burda %18 sıfır ama bizde olan durumlar da olabilecek
  • 05-12-2021, 07:25:27
    #7
    doğru anladıysam şu kod işinizi görecektir;
    $items = [
        0 => ['price' => 100, 'tax' => 8],
        1 => ['price' => 100, 'tax' => 18],
        2 => ['price' => 100, 'tax' => 15],
        3 => ['price' => 100, 'tax' => 18],
    ];
    
    $vergiler = [];
    
    foreach($items as $i)
        $vergiler[$i['tax']][] = $i['price'];
    
    $vergiler = array_map(function($v, $k){
        return [
            'vergiOrani' => $k,
            'toplamTutar' => array_sum($v),
            'toplamVergi' => array_reduce($v, function($prev, $item) use($k){
                return $prev + ($item * $k / 100);
            })
        ];
    }, $vergiler, array_keys($vergiler));
    
    print_r($vergiler);
    çıktısı şöyle olacaktır;
    Array
    (
        [0] => Array
        (
            [vergiOrani] => 8
            [toplamTutar] => 100
            [toplamVergi] => 8
        )
        [1] => Array
        (
            [vergiOrani] => 18
            [toplamTutar] => 200
            [toplamVergi] => 36
        )
        [2] => Array
        (
            [vergiOrani] => 15
            [toplamTutar] => 100
            [toplamVergi] => 15
        )
    )
  • 05-12-2021, 17:40:15
    #8
    Böyle bir çıktı aldık 2 adet 19 luk varken tekini aldı
  • 06-12-2021, 03:14:17
    #9
    ghergedan adlı üyeden alıntı: mesajı görüntüle
    doğru anladıysam şu kod işinizi görecektir;
    $items = [
        0 => ['price' => 100, 'tax' => 8],
        1 => ['price' => 100, 'tax' => 18],
        2 => ['price' => 100, 'tax' => 15],
        3 => ['price' => 100, 'tax' => 18],
    ];
    
    $vergiler = [];
    
    foreach($items as $i)
        $vergiler[$i['tax']][] = $i['price'];
    
    $vergiler = array_map(function($v, $k){
        return [
            'vergiOrani' => $k,
            'toplamTutar' => array_sum($v),
            'toplamVergi' => array_reduce($v, function($prev, $item) use($k){
                return $prev + ($item * $k / 100);
            })
        ];
    }, $vergiler, array_keys($vergiler));
    
    print_r($vergiler);
    çıktısı şöyle olacaktır;
    Array
    (
        [0] => Array
        (
            [vergiOrani] => 8
            [toplamTutar] => 100
            [toplamVergi] => 8
        )
        [1] => Array
        (
            [vergiOrani] => 18
            [toplamTutar] => 200
            [toplamVergi] => 36
        )
        [2] => Array
        (
            [vergiOrani] => 15
            [toplamTutar] => 100
            [toplamVergi] => 15
        )
    )
    Allah razı olsun array'i stackoverflow yardımı sizin array tipine çevirdik işlemi tamamladık.