Add contributor print report
parent
1408a7f11e
commit
e528941b65
|
|
@ -14,6 +14,7 @@ import { CampPageComponent } from './components/camp-page/camp-page.component';
|
||||||
import { MembersPageComponent } from './components/members-page/members-page.component';
|
import { MembersPageComponent } from './components/members-page/members-page.component';
|
||||||
import { AddTransactionPageComponent } from './components/add-transaction-page/add-transaction-page.component';
|
import { AddTransactionPageComponent } from './components/add-transaction-page/add-transaction-page.component';
|
||||||
import { MissionaryFormPageComponent } from './components/missionary-form-page/missionary-form-page.component';
|
import { MissionaryFormPageComponent } from './components/missionary-form-page/missionary-form-page.component';
|
||||||
|
import { ContributorYearlyReportComponent } from './components/contributor-yearly-report/contributor-yearly-report.component';
|
||||||
|
|
||||||
const routes =
|
const routes =
|
||||||
[
|
[
|
||||||
|
|
@ -76,6 +77,10 @@ const routes =
|
||||||
{
|
{
|
||||||
path: 'transactions/add',
|
path: 'transactions/add',
|
||||||
component: AddTransactionPageComponent
|
component: AddTransactionPageComponent
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'contributor/report',
|
||||||
|
component: ContributorYearlyReportComponent
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import { GoogleAnalyticsService } from './services/google-analytics.service';
|
||||||
import { WindowRefService } from './services/window-ref.service';
|
import { WindowRefService } from './services/window-ref.service';
|
||||||
import { EmailService } from './services/email.service';
|
import { EmailService } from './services/email.service';
|
||||||
import { SermonService } from './services/sermon.service';
|
import { SermonService } from './services/sermon.service';
|
||||||
|
import { PrintService } from './services/print-service';
|
||||||
import { LoginService } from './services/login.service';
|
import { LoginService } from './services/login.service';
|
||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { BrowserModule } from '@angular/platform-browser';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
|
@ -73,6 +74,7 @@ import { AddTransactionPageComponent } from './components/add-transaction-page/a
|
||||||
import { AddTransactionPopupComponent } from './components/add-transaction-page/add-transaction-popup/add-transaction-popup.component';
|
import { AddTransactionPopupComponent } from './components/add-transaction-page/add-transaction-popup/add-transaction-popup.component';
|
||||||
import { MissionaryFormPageComponent } from './components/missionary-form-page/missionary-form-page.component';
|
import { MissionaryFormPageComponent } from './components/missionary-form-page/missionary-form-page.component';
|
||||||
import { MissionarySupportService } from './services/missionary-support-service';
|
import { MissionarySupportService } from './services/missionary-support-service';
|
||||||
|
import { ContributorYearlyReportComponent } from './components/contributor-yearly-report/contributor-yearly-report.component';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -118,7 +120,8 @@ import { MissionarySupportService } from './services/missionary-support-service'
|
||||||
AddUserPopupComponent,
|
AddUserPopupComponent,
|
||||||
AddTransactionPageComponent,
|
AddTransactionPageComponent,
|
||||||
AddTransactionPopupComponent,
|
AddTransactionPopupComponent,
|
||||||
MissionaryFormPageComponent
|
MissionaryFormPageComponent,
|
||||||
|
ContributorYearlyReportComponent
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
BrowserModule,
|
BrowserModule,
|
||||||
|
|
@ -139,7 +142,7 @@ import { MissionarySupportService } from './services/missionary-support-service'
|
||||||
MatRadioModule,
|
MatRadioModule,
|
||||||
MatCheckboxModule
|
MatCheckboxModule
|
||||||
],
|
],
|
||||||
providers: [LoginService,UserService,GoogleAnalyticsService,SermonService,TransactionService,EventService,EmailService,MissionarySupportService,WindowRefService],
|
providers: [LoginService,PrintService,UserService,GoogleAnalyticsService,SermonService,TransactionService,EventService,EmailService,MissionarySupportService,WindowRefService],
|
||||||
entryComponents: [AddSermonPopupComponent,
|
entryComponents: [AddSermonPopupComponent,
|
||||||
LoginPopupComponent,
|
LoginPopupComponent,
|
||||||
OkPopupComponent,
|
OkPopupComponent,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
|
|
||||||
header{
|
div.header{
|
||||||
position:fixed;
|
position:fixed;
|
||||||
top:0;
|
top:0;
|
||||||
left:0;
|
left:0;
|
||||||
|
|
@ -51,7 +51,7 @@ header{
|
||||||
padding-bottom: 140px;
|
padding-bottom: 140px;
|
||||||
}
|
}
|
||||||
|
|
||||||
footer{
|
div.footer{
|
||||||
background-color: rgb(50,50,50);
|
background-color: rgb(50,50,50);
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
|
|
@ -81,7 +81,7 @@ footer{
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: 800px){
|
@media(max-width: 800px){
|
||||||
footer{
|
div.footer{
|
||||||
height: 380px;
|
height: 380px;
|
||||||
}
|
}
|
||||||
.footer-panel{
|
.footer-panel{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
|
|
||||||
<header>
|
<div class="header" [class.print-hide]="printService.isPrinting">
|
||||||
<div id="header-background" [ngStyle]="{'opacity':headerOpacity}"></div>
|
<div id="header-background" [ngStyle]="{'opacity':headerOpacity}"></div>
|
||||||
<button mat-button class="header-button-home" routerLink="/home"><img id="logo" src="assets/images/tiny/logo.png" height="30" alt="logo"> Old Fashion Baptist</button>
|
<button mat-button class="header-button-home" routerLink="/home"><img id="logo" src="assets/images/tiny/logo.png" height="30" alt="logo"> Old Fashion Baptist</button>
|
||||||
<span class="hideOnMobile"></span>
|
<span class="hideOnMobile"></span>
|
||||||
|
|
@ -12,13 +12,13 @@
|
||||||
(click)="mainMenuClick()">
|
(click)="mainMenuClick()">
|
||||||
<i ofbicon class="example-icon" style="line-height:20px;">menu</i>
|
<i ofbicon class="example-icon" style="line-height:20px;">menu</i>
|
||||||
</button>
|
</button>
|
||||||
</header>
|
</div>
|
||||||
|
|
||||||
<div class="content">
|
<div class="content" [class.print-hide-children]="printService.isPrinting">
|
||||||
<router-outlet></router-outlet>
|
<router-outlet></router-outlet>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer>
|
<div class="footer" [class.print-hide]="printService.isPrinting">
|
||||||
<div id="footer-content">
|
<div id="footer-content">
|
||||||
<div id="footer-contact-content" class="footer-panel">
|
<div id="footer-contact-content" class="footer-panel">
|
||||||
<a target="_blank" href="https://www.google.com/maps/place/Old+Fashion+Baptist+Church/@45.9814004,-112.5320574,11.87z/data=!4m12!1m6!3m5!1s0x535b078c3c74ea33:0xac299097142c5894!2sOld+Fashion+Baptist+Church!8m2!3d45.951287!4d-112.511978!3m4!1s0x535b078c3c74ea33:0xac299097142c5894!8m2!3d45.951287!4d-112.511978">
|
<a target="_blank" href="https://www.google.com/maps/place/Old+Fashion+Baptist+Church/@45.9814004,-112.5320574,11.87z/data=!4m12!1m6!3m5!1s0x535b078c3c74ea33:0xac299097142c5894!2sOld+Fashion+Baptist+Church!8m2!3d45.951287!4d-112.511978!3m4!1s0x535b078c3c74ea33:0xac299097142c5894!8m2!3d45.951287!4d-112.511978">
|
||||||
|
|
@ -45,9 +45,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="audio-player-filler" [hidden]="!showAudioPlayer" ></div>
|
<div class="audio-player-filler" [hidden]="!showAudioPlayer" ></div>
|
||||||
</footer>
|
</div>
|
||||||
|
|
||||||
<div class="audio-player" [class.audio-player-slide-up]="showAudioPlayer">
|
<div class="audio-player" [class.audio-player-slide-up]="showAudioPlayer" [class.print-hide]="printService.isPrinting">
|
||||||
<audio-player-component (closed)="audioPlayerClosed()" (started)="audioPlayerStarted()"></audio-player-component>
|
<audio-player-component (closed)="audioPlayerClosed()" (started)="audioPlayerStarted()"></audio-player-component>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import { Router, NavigationEnd, Event } from '@angular/router';
|
||||||
import { EventService } from '../../services/event.service';
|
import { EventService } from '../../services/event.service';
|
||||||
import { AudioPlayerService } from '../../services/audio-player.service';
|
import { AudioPlayerService } from '../../services/audio-player.service';
|
||||||
import { BibleVerseService } from '../../services/bible-verse.service';
|
import { BibleVerseService } from '../../services/bible-verse.service';
|
||||||
|
import { PrintService } from '../../services/print-service';
|
||||||
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
|
|
@ -26,7 +27,8 @@ export class AppComponent {
|
||||||
|
|
||||||
constructor(private router: Router,
|
constructor(private router: Router,
|
||||||
private audioPlayerService: AudioPlayerService,
|
private audioPlayerService: AudioPlayerService,
|
||||||
private googleAnalyticsService: GoogleAnalyticsService){
|
private googleAnalyticsService: GoogleAnalyticsService,
|
||||||
|
public printService: PrintService){
|
||||||
this.router.events.subscribe((event:Event) => {
|
this.router.events.subscribe((event:Event) => {
|
||||||
if(event instanceof NavigationEnd) {
|
if(event instanceof NavigationEnd) {
|
||||||
this.lastRoute = this.currRoute;
|
this.lastRoute = this.currRoute;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
@media screen {
|
||||||
|
:host {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
:host {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.h-100 {
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-block {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-align-center {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-align-top {
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-justify-center {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-justify-space-between {
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border-top: 1px solid green;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mt-20 {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mb-20 {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-direction-column {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-break-before {
|
||||||
|
page-break-before: always;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fw-bold {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hilight-yellow {
|
||||||
|
background-color: yellow;
|
||||||
|
-webkit-print-color-adjust: exact;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.cell-padding-5 td, table.cell-padding-5 th {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
<div class="h-100 flex flex-align-center flex-justify-center flex-direction-column">
|
||||||
|
<img src="../../../assets/images/original/logo_dark.png">
|
||||||
|
<p>
|
||||||
|
Old Fashion Baptist Church Contribution Report {{taxYear}}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{contributorName}}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page-break-before">
|
||||||
|
<div class="header flex flex-justify-space-between">
|
||||||
|
<div>
|
||||||
|
<img src="../../../assets/images/original/logo_dark.png">
|
||||||
|
</div>
|
||||||
|
<div class="text-right">
|
||||||
|
<p>Old Fashion Baptist Church</p>
|
||||||
|
<p>5003 Wynne Ave</p>
|
||||||
|
<p>Butte, MT 59701</p>
|
||||||
|
<p>(406) 494-5028</p>
|
||||||
|
<p>ofbbutte.com</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr class="hr mt-20">
|
||||||
|
<h2 class="text-center mt-20">Old Fashion Baptist Church Giving Statement {{taxYear}}</h2>
|
||||||
|
<hr class="mt-20">
|
||||||
|
<div class="flex flex-align-top flex-justify-space-between">
|
||||||
|
<div class="mt-20">
|
||||||
|
<p><b>Name: </b>{{contributorName}}</p>
|
||||||
|
<p><b>Tax Year: </b>{{taxYear}}</p>
|
||||||
|
<p><b>Registration Code: </b>{{registrationCode}}</p>
|
||||||
|
</div>
|
||||||
|
<div class="mt-20">
|
||||||
|
<table class="cell-padding-5">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">{{taxYear}} Giving Summary</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="cell-padding-5">
|
||||||
|
<tr>
|
||||||
|
<td class="fw-bold">General Fund</td>
|
||||||
|
<td class="text-right">{{totalGeneral() | currency}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="fw-bold">Missions Fund</td>
|
||||||
|
<td class="text-right">{{totalMissions() | currency}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="fw-bold">Total Giving</td>
|
||||||
|
<td class="text-right hilight-yellow">{{(totalGeneral() + totalMissions()) | currency}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-20">
|
||||||
|
Thank you for your contribution. The information provided in this statement reflects
|
||||||
|
your contributions on record for tax year {{taxYear}}. The chart below provides current and
|
||||||
|
historical data (if available) for informational purposes only. The data on the following
|
||||||
|
pages includes a detail listing of contributions for {{taxYear}}.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table class="page-break-before cell-padding-5">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Date</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr *ngFor="let t of transactions">
|
||||||
|
<td>{{t.date}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ContributorYearlyReportComponent } from './contributor-yearly-report.component';
|
||||||
|
|
||||||
|
describe('ContributorYearlyReportComponent', () => {
|
||||||
|
let component: ContributorYearlyReportComponent;
|
||||||
|
let fixture: ComponentFixture<ContributorYearlyReportComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ ContributorYearlyReportComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ContributorYearlyReportComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { PrintService } from '../../services/print-service';
|
||||||
|
import { Transaction } from '../add-transaction-page/transaction';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-contributor-yearly-report',
|
||||||
|
templateUrl: './contributor-yearly-report.component.html',
|
||||||
|
styleUrls: ['./contributor-yearly-report.component.css']
|
||||||
|
})
|
||||||
|
export class ContributorYearlyReportComponent implements OnInit {
|
||||||
|
|
||||||
|
public transactions: Transaction[] = [];
|
||||||
|
public contributorName: string = 'Bob and Jill Handerson';
|
||||||
|
public taxYear: number = 2019;
|
||||||
|
public registrationCode: string = 'HDIJDHDFD*#*@';
|
||||||
|
|
||||||
|
constructor(public printService: PrintService) { }
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
const t = new Transaction();
|
||||||
|
t.amount = 400;
|
||||||
|
t.checkNumber = '3434';
|
||||||
|
t.contributorId = 45;
|
||||||
|
t.date = '2019-10-20';
|
||||||
|
t.description = 'Some description';
|
||||||
|
t.fundId = 1;
|
||||||
|
t.goodsOrServices = false;
|
||||||
|
t.taxYear = 2019;
|
||||||
|
t.typeId = 1;
|
||||||
|
for(let i = 0; i < 100; i++) {
|
||||||
|
const t2 = new Transaction();
|
||||||
|
t2.amount = 300;
|
||||||
|
t2.checkNumber = 'ghff';
|
||||||
|
t2.contributorId = 45;
|
||||||
|
t2.date = '2019-10-23';
|
||||||
|
t2.description = 'Missionary Family';
|
||||||
|
t2.fundId = 2;
|
||||||
|
t2.goodsOrServices = false;
|
||||||
|
t2.taxYear = 2019;
|
||||||
|
t2.typeId = 2;
|
||||||
|
this.transactions.push(t);
|
||||||
|
}
|
||||||
|
this.transactions.push(t);
|
||||||
|
this.printService.setPrinting(true);
|
||||||
|
window.print();
|
||||||
|
}
|
||||||
|
|
||||||
|
public totalGeneral() {
|
||||||
|
let sum = 0;
|
||||||
|
this.transactions.filter(t => t.fundId === 1).forEach(t => sum += t.amount);
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public totalMissions() {
|
||||||
|
let sum = 0;
|
||||||
|
this.transactions.filter(t => t.fundId === 2).forEach(t => sum += t.amount);
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class PrintService {
|
||||||
|
|
||||||
|
public isPrinting: boolean = false;
|
||||||
|
|
||||||
|
constructor(){}
|
||||||
|
|
||||||
|
public setPrinting(printing: boolean) {
|
||||||
|
this.isPrinting = printing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -23,6 +23,21 @@ body {
|
||||||
background-color: red;
|
background-color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
header,footer {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.print-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.print-hide-children > * {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*MATERIAL FONT FOR ICONS*/
|
/*MATERIAL FONT FOR ICONS*/
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Material Icons';
|
font-family: 'Material Icons';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue