~mdoyen/homebank/5.2.x

« back to all changes in this revision

Viewing changes to src/rep-vehicle.c

  • Committer: Maxime Doyen
  • Date: 2019-07-29 20:34:22 UTC
  • Revision ID: homebank@free.fr-20190729203422-hy3g4szjv3dbzmxu
5.2.7 release

Show diffs side-by-side

added added

removed removed

Lines of Context:
81
81
{
82
82
struct repvehicle_data *data;
83
83
 
84
 
        DB( g_print("(repvehicle) date change\n") );
 
84
        DB( g_print("\n[vehiclecost] date change\n") );
85
85
 
86
86
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
87
87
 
123
123
struct repvehicle_data *data;
124
124
gint range;
125
125
 
126
 
        DB( g_print("(repvehicle) range change\n") );
 
126
        DB( g_print("\n[vehiclecost] range change\n") );
127
127
 
128
128
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
129
129
 
276
276
GList *list;
277
277
guint32 catkey;
278
278
 
279
 
        DB( g_print("(repvehicle) compute\n") );
 
279
        DB( g_print("\n[vehiclecost] compute\n") );
280
280
 
281
281
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
282
282
 
298
298
 
299
299
        // collect transactions
300
300
        // the purpose here is to collect all cat transaction
301
 
        // and precompute some datas
 
301
        // and precompute item-> meter/fuel/partial
302
302
        list = g_queue_peek_head_link(data->txn_queue);
303
303
        while (list != NULL)
304
304
        {
374
374
GList *list;
375
375
gchar *buf;
376
376
gint nb_refuel = 0;
 
377
int nb_fullrefuel = 0; 
377
378
guint lastmeter = 0;
378
379
 
379
 
        DB( g_print("(repvehicle) update\n") );
 
380
        DB( g_print("\n[vehiclecost] update\n") );
380
381
 
381
382
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
382
383
 
428
429
                                lastmeter = item->meter;
429
430
                                nb_refuel++;
430
431
 
431
 
                                DB( g_print(" eval : d=%d v=%4.2f $%8.2f dist=%d\n", item->meter, item->fuel, trn_amount, item->dist) );
432
 
 
433
 
                                //bugfix #159066
 
432
                                DB( g_print("\n eval %02d :: d=%d v=%.2f $%.2f dist=%d\n", nb_refuel, item->meter, item->fuel, trn_amount, item->dist) );
 
433
                                DB( g_print(" + %s :: pf=%.2f pd=%d\n", item->partial ? "partial" : "full", partial_fuel, partial_dist) );
 
434
 
 
435
                                centkm = 0;
 
436
                                dist = 0;
 
437
 
 
438
                                //bugfix #159066 partial/full
434
439
                                if(item->partial == FALSE)
435
440
                                {
436
 
                                        // full refuel after partial
437
 
                                        if(partial_fuel && partial_dist)
438
 
                                        {
439
 
                                                DB( g_print(" + full refuel after partial\n") );
440
 
                                                partial_fuel += item->fuel;
441
 
                                                partial_dist += item->dist;
442
 
                                                dist = item->dist;
443
 
                                                centkm = partial_dist != 0 ? partial_fuel * 100 / partial_dist : 0;
444
 
                                        }
445
 
                                        else
446
 
                                        {
447
 
                                                DB( g_print(" + real full refuel\n") );
448
 
                                                dist = item->dist;
449
 
                                                centkm = item->dist != 0 ? item->fuel * 100 / item->dist : 0;
 
441
                                        //#1836380 if we don't have a full already, the computing will be wrong
 
442
                                        if( nb_fullrefuel > 0 )
 
443
                                        {
 
444
                                                // full refuel after partial
 
445
                                                if(partial_fuel && partial_dist)
 
446
                                                {
 
447
                                                        partial_fuel += item->fuel;
 
448
                                                        partial_dist += item->dist;
 
449
                                                        dist = item->dist;
 
450
                                                        centkm = partial_dist != 0 ? partial_fuel * 100 / partial_dist : 0;
 
451
                                                        DB( g_print(" + centkm=%.2f %.2f * 100 / %d (full after partial)\n", centkm, partial_fuel, partial_dist) );
 
452
                                                }
 
453
                                                else
 
454
                                                {
 
455
                                                        dist = item->dist;
 
456
                                                        centkm = item->dist != 0 ? item->fuel * 100 / item->dist : 0;
 
457
                                                        DB( g_print(" + centkm=%.2f :: %.2f * 100 / %d (full after full)\n", centkm, item->fuel, item->dist) );
 
458
                                                }
450
459
                                        }
451
460
                                        partial_fuel = 0;
452
461
                                        partial_dist = 0;
 
462
                                        nb_fullrefuel++;
453
463
                                }
454
464
                                // partial refuel
455
465
                                else
456
466
                                {
457
 
                                        DB( g_print(" + partial refuel\n") );
458
467
                                        partial_fuel += item->fuel;
459
468
                                        partial_dist += item->dist;
460
469
                                        dist = item->dist;
461
 
                                        centkm = 0;
 
470
                                        DB( g_print(" + centkm= not computable\n") );
462
471
                                }
463
472
 
464
473
                                distbyvol = 0;
465
474
                                if(centkm != 0)
466
475
                                        distbyvol = hb_amount_round((1/centkm)*100, 0);
467
476
 
468
 
                                DB( g_print(" + pf=%.2f pd=%d :: dbv=%d\n", partial_fuel, partial_dist, distbyvol) );
469
 
 
470
 
 
471
477
 
472
478
                        gtk_list_store_append (GTK_LIST_STORE(model), &iter);
473
479
 
484
490
                                    LST_CAR_PARTIAL, item->partial,
485
491
                                        -1);
486
492
 
487
 
                                DB( g_print(" + insert d=%d v=%4.2f $%8.2f %d %5.2f\n", item->meter, item->fuel, trn_amount, dist, centkm) );
 
493
                                //DB( g_print("\n insert d=%d v=%4.2f $%8.2f %d %5.2f\n", item->meter, item->fuel, trn_amount, dist, centkm) );
488
494
 
489
495
                                if(item->dist)
490
496
                                {
508
514
        GLOBALS->minor = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_minor));
509
515
 
510
516
 
511
 
                DB( g_print(" coef = 100 / %.2f = %.2f\n", (gdouble)data->total_dist, coef) );
512
 
 
513
 
                // row 1 is for 100km
514
 
                /*
515
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[1][1]), "1:1");     //Consumption
516
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[2][1]), "2:1");     //Fuel cost
517
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[3][1]), "3:1");     //Other cost
518
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[4][1]), "4:1");     //Total cost
519
 
                */
520
 
 
521
 
                // 100km fuel
522
 
                buf = g_strdup_printf(PREFS->vehicle_unit_vol, data->total_fuel * coef);
523
 
                gtk_label_set_text(GTK_LABEL(data->LA_avera[CAR_RES_FUEL]), buf);
524
 
                g_free(buf);
525
 
 
526
 
                // 100km fuelcost
527
 
                //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_avera[CAR_RES_FUELCOST]), data->total_fuelcost * coef, GLOBALS->kcur);
528
 
                hb_label_set_colvalue(GTK_LABEL(data->LA_avera[CAR_RES_FUELCOST]), data->total_fuelcost * coef, GLOBALS->kcur, GLOBALS->minor);
529
 
 
530
 
                // 100km other cost
531
 
                //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_avera[CAR_RES_OTHERCOST]), data->total_misccost * coef, GLOBALS->kcur);
532
 
                hb_label_set_colvalue(GTK_LABEL(data->LA_avera[CAR_RES_OTHERCOST]), data->total_misccost * coef, GLOBALS->kcur, GLOBALS->minor);
533
 
 
534
 
                // 100km cost
535
 
                //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_avera[CAR_RES_TOTALCOST]), (data->total_fuelcost + data->total_misccost) * coef, GLOBALS->kcur);
536
 
                hb_label_set_colvalue(GTK_LABEL(data->LA_avera[CAR_RES_TOTALCOST]), (data->total_fuelcost + data->total_misccost) * coef, GLOBALS->kcur, GLOBALS->minor);
537
 
 
538
 
 
539
 
                // row 2 is for total
540
 
                /*
541
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[1][2]), "1:2");     //Consumption
542
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[2][2]), "2:2");     //Fuel cost
543
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[3][2]), "3:2");     //Other cost
544
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[4][2]), "4:2");     //Total
545
 
                */
546
 
 
547
 
                // total distance
548
 
                buf = g_strdup_printf(PREFS->vehicle_unit_dist, data->total_dist);
549
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[CAR_RES_METER]), buf);
550
 
                g_free(buf);
551
 
 
552
 
                // total fuel
553
 
                buf = g_strdup_printf(PREFS->vehicle_unit_vol, data->total_fuel);
554
 
                gtk_label_set_text(GTK_LABEL(data->LA_total[CAR_RES_FUEL]), buf);
555
 
                g_free(buf);
556
 
 
557
 
                // total fuelcost
558
 
                //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_total[CAR_RES_FUELCOST]), data->total_fuelcost, GLOBALS->kcur);
559
 
                hb_label_set_colvalue(GTK_LABEL(data->LA_total[CAR_RES_FUELCOST]), data->total_fuelcost, GLOBALS->kcur, GLOBALS->minor);
560
 
 
561
 
                // total other cost
562
 
                //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_total[CAR_RES_OTHERCOST]), data->total_misccost, GLOBALS->kcur);
563
 
                hb_label_set_colvalue(GTK_LABEL(data->LA_total[CAR_RES_OTHERCOST]), data->total_misccost, GLOBALS->kcur, GLOBALS->minor);
564
 
 
565
 
                // total cost
566
 
                //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_total[CAR_RES_TOTALCOST]), data->total_fuelcost + data->total_misccost, GLOBALS->kcur);
567
 
                hb_label_set_colvalue(GTK_LABEL(data->LA_total[CAR_RES_TOTALCOST]), data->total_fuelcost + data->total_misccost, GLOBALS->kcur, GLOBALS->minor);
 
517
        DB( g_print(" coef = 100 / %.2f = %.2f\n", (gdouble)data->total_dist, coef) );
 
518
 
 
519
        // row 1 is for 100km
 
520
        /*
 
521
        gtk_label_set_text(GTK_LABEL(data->LA_total[1][1]), "1:1");     //Consumption
 
522
        gtk_label_set_text(GTK_LABEL(data->LA_total[2][1]), "2:1");     //Fuel cost
 
523
        gtk_label_set_text(GTK_LABEL(data->LA_total[3][1]), "3:1");     //Other cost
 
524
        gtk_label_set_text(GTK_LABEL(data->LA_total[4][1]), "4:1");     //Total cost
 
525
        */
 
526
 
 
527
        // 100km fuel
 
528
        buf = g_strdup_printf(PREFS->vehicle_unit_vol, data->total_fuel * coef);
 
529
        gtk_label_set_text(GTK_LABEL(data->LA_avera[CAR_RES_FUEL]), buf);
 
530
        g_free(buf);
 
531
 
 
532
        // 100km fuelcost
 
533
        //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_avera[CAR_RES_FUELCOST]), data->total_fuelcost * coef, GLOBALS->kcur);
 
534
        hb_label_set_colvalue(GTK_LABEL(data->LA_avera[CAR_RES_FUELCOST]), data->total_fuelcost * coef, GLOBALS->kcur, GLOBALS->minor);
 
535
 
 
536
        // 100km other cost
 
537
        //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_avera[CAR_RES_OTHERCOST]), data->total_misccost * coef, GLOBALS->kcur);
 
538
        hb_label_set_colvalue(GTK_LABEL(data->LA_avera[CAR_RES_OTHERCOST]), data->total_misccost * coef, GLOBALS->kcur, GLOBALS->minor);
 
539
 
 
540
        // 100km cost
 
541
        //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_avera[CAR_RES_TOTALCOST]), (data->total_fuelcost + data->total_misccost) * coef, GLOBALS->kcur);
 
542
        hb_label_set_colvalue(GTK_LABEL(data->LA_avera[CAR_RES_TOTALCOST]), (data->total_fuelcost + data->total_misccost) * coef, GLOBALS->kcur, GLOBALS->minor);
 
543
 
 
544
 
 
545
        // row 2 is for total
 
546
        /*
 
547
        gtk_label_set_text(GTK_LABEL(data->LA_total[1][2]), "1:2");     //Consumption
 
548
        gtk_label_set_text(GTK_LABEL(data->LA_total[2][2]), "2:2");     //Fuel cost
 
549
        gtk_label_set_text(GTK_LABEL(data->LA_total[3][2]), "3:2");     //Other cost
 
550
        gtk_label_set_text(GTK_LABEL(data->LA_total[4][2]), "4:2");     //Total
 
551
        */
 
552
 
 
553
        // total distance
 
554
        buf = g_strdup_printf(PREFS->vehicle_unit_dist, data->total_dist);
 
555
        gtk_label_set_text(GTK_LABEL(data->LA_total[CAR_RES_METER]), buf);
 
556
        g_free(buf);
 
557
 
 
558
        // total fuel
 
559
        buf = g_strdup_printf(PREFS->vehicle_unit_vol, data->total_fuel);
 
560
        gtk_label_set_text(GTK_LABEL(data->LA_total[CAR_RES_FUEL]), buf);
 
561
        g_free(buf);
 
562
 
 
563
        // total fuelcost
 
564
        //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_total[CAR_RES_FUELCOST]), data->total_fuelcost, GLOBALS->kcur);
 
565
        hb_label_set_colvalue(GTK_LABEL(data->LA_total[CAR_RES_FUELCOST]), data->total_fuelcost, GLOBALS->kcur, GLOBALS->minor);
 
566
 
 
567
        // total other cost
 
568
        //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_total[CAR_RES_OTHERCOST]), data->total_misccost, GLOBALS->kcur);
 
569
        hb_label_set_colvalue(GTK_LABEL(data->LA_total[CAR_RES_OTHERCOST]), data->total_misccost, GLOBALS->kcur, GLOBALS->minor);
 
570
 
 
571
        // total cost
 
572
        //hb_label_set_colvaluecurr(GTK_LABEL(data->LA_total[CAR_RES_TOTALCOST]), data->total_fuelcost + data->total_misccost, GLOBALS->kcur);
 
573
        hb_label_set_colvalue(GTK_LABEL(data->LA_total[CAR_RES_TOTALCOST]), data->total_fuelcost + data->total_misccost, GLOBALS->kcur, GLOBALS->minor);
568
574
 
569
575
 
570
576
}
573
579
{
574
580
struct repvehicle_data *data;
575
581
 
576
 
        DB( g_print("(repvehicle) toggle\n") );
 
582
        DB( g_print("\n[vehiclecost] toggle\n") );
577
583
 
578
584
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
579
585
 
599
605
*/
600
606
static void repvehicle_setup(struct repvehicle_data *data)
601
607
{
602
 
        DB( g_print("(repvehicle) setup\n") );
 
608
        DB( g_print("\n[vehiclecost] setup\n") );
603
609
 
604
610
        data->txn_queue = g_queue_new ();
605
611
        data->vehicle_list = NULL;
642
648
struct repvehicle_data *data = user_data;
643
649
struct WinGeometry *wg;
644
650
 
645
 
        DB( g_print("(repvehicle) dispose\n") );
 
651
        DB( g_print("\n[vehiclecost] dispose\n") );
646
652
 
647
653
        g_queue_free (data->txn_queue);
648
654
        
683
689
        data = g_malloc0(sizeof(struct repvehicle_data));
684
690
        if(!data) return NULL;
685
691
 
686
 
        DB( g_print("(repvehicle) new\n") );
 
692
        DB( g_print("\n[vehiclecost] new\n") );
687
693
 
688
694
        //disable define windows
689
695
        GLOBALS->define_off++;