Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 981b670e

Von Udo Spallek vor fast 19 Jahren hinzugefügt

  • ID 981b670e29449b7ebffe6c910439a05e6613ec6b
  • Vorgänger cb4ccd7e
  • Nachfolger efc26039

Diverse USTVA Bugs geloest
Solve Bug: 49: UST wurde berechnet, jetzt ausgelesen, mit Patchen von Andre Schubert THX
Solve Bug: 164: Grundsätzliche Berechnung der UST
Solve Bug: 173: Teilbezahlte Rechnungen bei IST-Versteuerung sollten jetzt klappen, THX Yvonne Einberger
Vorlagen ueberarbeitet, sub ustva und sub get_accounts_ustva in ustva.pm verlegt.
Alle Variablen der USTVA durchgängig nutzbar gemacht.

Unterschiede anzeigen:

SL/USTVA.pm
556 556
  $main::lxdebug->leave_sub();
557 557
}
558 558

  
559

  
560
sub ustva {
561
  $main::lxdebug->enter_sub();
562

  
563
  my ($self, $myconfig, $form) = @_;
564

  
565
  # connect to database
566
  my $dbh = $form->dbconnect($myconfig);
567

  
568
  my $last_period     = 0;
569
  my $category        = "pos_ustva";
570
  my @categories_cent = qw(511 861 36 80 971 931 98 96 53 74 
571
                           85 65 66 61 62 67 63 64 59 69 39 83 
572
                           Z43 Z45 Z53 Z62 Z65 Z67);
573
                           
574
  my @categories_euro = qw(41 44 49 43 48 51 86 35 77 76 91 97 93 
575
                           95 94 42 60 45 52 73 84);
576

  
577
  $form->{decimalplaces} *= 1;
578

  
579
  foreach $item (@categories_cent) {
580
    $form->{"$item"} = 0;
581
  }
582
  foreach $item (@categories_euro) {
583
    $form->{"$item"} = 0;
584
  }
585

  
586

  
587
  &get_accounts_ustva($dbh, $last_period, $form->{fromdate}, $form->{todate},
588
                  $form, $category);
589

  
590

  
591
  #
592
  # Berechnung der USTVA Formularfelder
593
  #
594
  $form->{"51r"} = $form->{"511"};
595
  $form->{"86r"} = $form->{"861"};
596
  $form->{"97r"} = $form->{"971"};
597
  $form->{"93r"} = $form->{"931"};
598
  $form->{"Z43"} = $form->{"51r"}+ $form->{"86r"} + 
599
                   $form->{"36"} + $form->{"80"}  +
600
                   $form->{"97r"}+ $form->{"93r"} + 
601
                   $form->{"96"} + $form->{"98"};
602
  $form->{"Z45"} = $form->{"Z43"};
603
  $form->{"Z53"} = $form->{"Z43"};
604
  $form->{"Z62"} = $form->{"Z43"}- $form->{"66"} -
605
                   $form->{"61"} - $form->{"62"} -
606
                   $form->{"63"} - $form->{"64"} -
607
                   $form->{"59"};
608
  $form->{"Z65"} = $form->{"Z62"}- $form->{"69"};
609
  $form->{"83"}  = $form->{"Z65"}- $form->{"39"};
610
  
611
  foreach $item (@categories_cent) {
612
    $form->{$item} =
613
      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2), 2, '0');
614
  }
615

  
616
  foreach $item (@categories_euro) {
617
    $form->{$item} =
618
      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 0), 0, '0');
619
  }
620

  
621
  $dbh->disconnect;
622

  
623
  $main::lxdebug->leave_sub();
624
}
625

  
626
sub get_accounts_ustva {
627
  $main::lxdebug->enter_sub();
628

  
629
  my ($dbh, $last_period, $fromdate, $todate, $form, $category) = @_;
630

  
631
  my ($null, $department_id) = split /--/, $form->{department};
632

  
633
  my $query;
634
  my $dpt_where;
635
  my $dpt_join;
636
  my $project;
637
  my $where    = "1 = 1";
638
  my $glwhere  = "";
639
  my $subwhere = "";
640
  my $ARwhere = "";
641
  my $item;
642

  
643
  if ($fromdate) {
644
    if ($form->{method} eq 'cash') {
645
      $subwhere .= " AND transdate >= '$fromdate'";
646
      $glwhere = " AND ac.transdate >= '$fromdate'";
647
      $ARwhere .= " AND acc.transdate >= '$fromdate'";
648
      $where .= " AND ac.transdate >= '$fromdate'";
649
    }
650
  }
651

  
652
  if ($todate) {
653
    $where    .= " AND ac.transdate <= '$todate'";
654
    $ARwhere    .= " AND acc.transdate <= '$todate'";
655
    $arwhere    .= " AND ac.transdate <= '$todate'";    
656
    $subwhere .= " AND transdate <= '$todate'";
657
  }
658

  
659
  if ($department_id) {
660
    $dpt_join = qq|
661
               JOIN department t ON (a.department_id = t.id)
662
		  |;
663
    $dpt_where = qq|
664
               AND t.id = $department_id
665
	           |;
666
  }
667

  
668
  if ($form->{project_id}) {
669
    $project = qq|
670
                 AND ac.project_id = $form->{project_id}
671
		 |;
672
  }
673

  
674
  if ($form->{method} eq 'cash') {
675

  
676
    $query = qq|
677

  
678
 SELECT
679
   SUM( ac.amount *
680
      -- Bezahlt / Rechnungssumme
681
     ( 
682
       SELECT SUM(acc.amount)
683
       FROM acc_trans acc
684
       INNER JOIN chart c ON (acc.chart_id = c.id AND c.link like '%AR_paid%')
685
       WHERE
686
        1=1 
687
        $ARwhere
688
        AND acc.trans_id = ac.trans_id
689
        )
690
     / 
691
     ( 
692
      select amount from ar where id = ac.trans_id  
693
     )
694
   ) AS amount,
695
   c.pos_ustva
696
   FROM acc_trans ac
697
   JOIN chart c ON (c.id = ac.chart_id)
698
   JOIN ar ON (ar.id = ac.trans_id)
699
   where 
700
     1=1 
701
     $arwhere
702
   GROUP BY c.pos_ustva
703
	UNION
704

  
705
	         SELECT sum(ac.amount) AS amount,
706
		 c.$category
707
		 FROM acc_trans ac
708
		 JOIN chart c ON (c.id = ac.chart_id)
709
		 JOIN ap a ON (a.id = ac.trans_id)
710
		 $dpt_join
711
		 WHERE $where
712
		 $dpt_where
713
		 AND ac.trans_id IN
714
		   (
715
		     SELECT trans_id
716
		     FROM acc_trans
717
		     JOIN chart ON (chart_id = id)
718
		     WHERE link LIKE '%AP_paid%'
719
		     $subwhere
720
		   )
721

  
722
		 $project
723
		 GROUP BY c.$category
724

  
725
        UNION
726

  
727
		 SELECT sum(ac.amount) AS amount,
728
		 c.$category
729
		 FROM acc_trans ac
730
		 JOIN chart c ON (c.id = ac.chart_id)
731
		 JOIN gl a ON (a.id = ac.trans_id)
732
		 $dpt_join
733
		 WHERE $where
734
		 $glwhere
735
		 $dpt_from
736
		 AND NOT (c.link = 'AR' OR c.link = 'AP')
737
		 $project
738
		 GROUP BY c.$category
739

  
740
		 |;
741

  
742
    if ($form->{project_id}) {
743

  
744
      $query .= qq|
745

  
746
	 UNION
747

  
748
		 SELECT SUM(ac.sellprice * ac.qty) AS amount,
749
		 c.$category
750
		 FROM invoice ac
751
	         JOIN ar a ON (a.id = ac.trans_id)
752
		 JOIN parts p ON (ac.parts_id = p.id)
753
		 JOIN chart c on (p.income_accno_id = c.id)
754
	         $dpt_join
755
	-- use transdate from subwhere
756
		 WHERE 1 = 1 $subwhere
757
		 AND c.category = 'I'
758
		 $dpt_where
759
		 AND ac.trans_id IN
760
		   (
761
		     SELECT trans_id
762
		     FROM acc_trans
763
		     JOIN chart ON (chart_id = id)
764
		     WHERE link LIKE '%AR_paid%'
765
		     $subwhere
766
		   )
767

  
768
		 $project
769
		 GROUP BY c.$category
770

  
771
	 UNION
772

  
773
		 SELECT SUM(ac.sellprice) AS amount,
774
		 c.$category
775
		 FROM invoice ac
776
	         JOIN ap a ON (a.id = ac.trans_id)
777
		 JOIN parts p ON (ac.parts_id = p.id)
778
		 JOIN chart c on (p.expense_accno_id = c.id)
779
	         $dpt_join
780
		 WHERE 1 = 1 $subwhere
781
		 AND c.category = 'E'
782
		 $dpt_where
783
		 AND ac.trans_id IN
784
		   (
785
		     SELECT trans_id
786
		     FROM acc_trans
787
		     JOIN chart ON (chart_id = id)
788
		     WHERE link LIKE '%AP_paid%'
789
		     $subwhere
790
		   )
791

  
792
		 $project
793
		 GROUP BY c.$category
794
		 |;
795
    }
796

  
797
  } else {
798

  
799
    if ($department_id) {
800
      $dpt_join = qq|
801
	      JOIN dpt_trans t ON (t.trans_id = ac.trans_id)
802
	      |;
803
      $dpt_where = qq|
804
               AND t.department_id = $department_id
805
	      |;
806
    }
807

  
808
    $query = qq|
809

  
810
		 SELECT sum(ac.amount) AS amount,
811
		 c.$category
812
		 FROM acc_trans ac
813
		 JOIN chart c ON (c.id = ac.chart_id)
814
		 $dpt_join
815
		 WHERE $where
816
		 $dpt_where
817
		 $project
818
		 GROUP BY c.$category
819
		 |;
820

  
821
    if ($form->{project_id}) {
822

  
823
      $query .= qq|
824

  
825
	UNION
826

  
827
		 SELECT SUM(ac.sellprice * ac.qty) AS amount,
828
		 c.$category
829
		 FROM invoice ac
830
	         JOIN ar a ON (a.id = ac.trans_id)
831
		 JOIN parts p ON (ac.parts_id = p.id)
832
		 JOIN chart c on (p.income_accno_id = c.id)
833
	         $dpt_join
834
	-- use transdate from subwhere
835
		 WHERE 1 = 1 $subwhere
836
		 AND c.category = 'I'
837
		 $dpt_where
838
		 $project
839
		 GROUP BY c.$category
840

  
841
	UNION
842

  
843
		 SELECT SUM(ac.sellprice * ac.qty) * -1 AS amount,
844
		 c.$category
845
		 FROM invoice ac
846
	         JOIN ap a ON (a.id = ac.trans_id)
847
		 JOIN parts p ON (ac.parts_id = p.id)
848
		 JOIN chart c on (p.expense_accno_id = c.id)
849
	         $dpt_join
850
		 WHERE 1 = 1 $subwhere
851
		 AND c.category = 'E'
852
		 $dpt_where
853
		 $project
854
		 GROUP BY c.$category
855
		 |;
856

  
857
    }
858
  }
859

  
860
  my @accno;
861
  my $accno;
862
  my $ref;
863
  #print $query;
864
  my $sth = $dbh->prepare($query);
865
  $sth->execute || $form->dberror($query);
866

  
867
  while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
868
    if ($ref->{amount} < 0) {
869
      $ref->{amount} *= -1;
870
    }
871
    if ($category eq "pos_bwa") {
872
      if ($last_period) {
873
        $form->{ $ref->{$category} }{kumm} += $ref->{amount};
874
      } else {
875
        $form->{ $ref->{$category} }{jetzt} += $ref->{amount};
876
      }
877
    } else {
878
      $form->{ $ref->{$category} } += $ref->{amount};
879
    }
880
  }
881
  $sth->finish;
882

  
883
  $main::lxdebug->leave_sub();
884
}
885

  
886

  
559 887
1;

Auch abrufbar als: Unified diff