// // StatsViewController.m // Volta // // Created by Ronny Fenrich on 2013-06-13. // Copyright (c) 2013 Decoder. All rights reserved. // #import "StatsViewController.h" #import "StatsTabBarController.h" @interface StatsViewController () @property (weak, nonatomic) IBOutlet UITextField *startDate; @property (weak, nonatomic) IBOutlet UITextField *endDate; @property (weak, nonatomic) IBOutlet UIScrollView *content; @property (strong, nonatomic) UIDatePicker *startDatePicker; @property (strong, nonatomic) UIDatePicker *endDatePicker; @property (strong, nonatomic) NSDate *currentStartDate; @property (strong, nonatomic) NSDate *currentEndDate; @end @implementation StatsViewController - (void)viewDidLoad { [super viewDidLoad]; self.navigationController.navigationBarHidden = NO; self.navigationItem.hidesBackButton = YES; self.navigationController.navigationBar.barStyle = UIBarStyleBlack; UIView *paddingView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)]; self.startDate.leftView = paddingView1; self.startDate.leftViewMode = UITextFieldViewModeAlways; UIView *paddingView2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)]; self.endDate.leftView = paddingView2; self.endDate.leftViewMode = UITextFieldViewModeAlways; self.content.$y = 0; self.startDatePicker = [[UIDatePicker alloc] init]; [self.startDatePicker setDatePickerMode:UIDatePickerModeDate]; [self.startDatePicker addTarget:self action:@selector(startDatePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; self.startDate.inputView = self.startDatePicker; NSDate *startDateValue = [NSDate dateWithTimeIntervalSince1970:1325448000]; // 1.1.2012 [self.startDatePicker setDate:startDateValue]; [self startDatePickerValueChanged:nil]; self.endDatePicker = [[UIDatePicker alloc] init]; [self.endDatePicker setDatePickerMode:UIDatePickerModeDate]; [self.endDatePicker addTarget:self action:@selector(endDatePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; self.endDate.inputView = self.endDatePicker; NSDate *endDateValue = [NSDate date]; [self.endDatePicker setDate:endDateValue]; [self endDatePickerValueChanged:nil]; } - (void)startDatePickerValueChanged:(id)sender { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; self.startDate.text = [dateFormatter stringFromDate:[self.startDatePicker date]]; } - (void)endDatePickerValueChanged:(id)sender { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; self.endDate.text = [dateFormatter stringFromDate:[self.endDatePicker date]]; } - (void)viewDidUnload { [self setStartDate:nil]; [self setEndDate:nil]; [self setContent:nil]; [super viewDidUnload]; } #pragma mark UITextFieldDelegate #define SCROLLVIEW_HEIGHT 256 - (BOOL)textFieldShouldReturn:(UITextField *)textField { // user did hit the Return/Done button on the keyboard if (textField == self.startDate) { // goto password field [self.endDate becomeFirstResponder]; } else if (textField == self.endDate) { [self statsStartdateEnddate:nil]; } return YES; } - (void)textFieldDidEndEditing:(UITextField *)textField { [textField resignFirstResponder]; [self.content setContentOffset:CGPointZero animated:YES]; // [self performBlock:^(id sender) { // self.content.contentSize = CGSizeMake(self.content.frame.size.width, SCROLLVIEW_HEIGHT); // } afterDelay:0.4]; } #define ACTIVE_TEXTFIELD_SCROLLVIEW_OFFSET 122 - (void)textFieldDidBeginEditing:(UITextField *)textField { self.content.contentSize = CGSizeMake(self.content.frame.size.width, SCROLLVIEW_HEIGHT + ACTIVE_TEXTFIELD_SCROLLVIEW_OFFSET); [self.content setContentOffset:CGPointMake(0, ACTIVE_TEXTFIELD_SCROLLVIEW_OFFSET) animated:YES]; } - (void)dismissKeyboard { [self.view endEditing:YES]; } #pragma mark - Action methods - (IBAction)backgroundTapped:(id)sender { [self dismissKeyboard]; } - (IBAction)statsCurrentMonth:(id)sender { NSDate *curDate = [NSDate date]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // First of month [comps setDay:1]; NSDate *startDate = [calendar dateFromComponents:comps]; // Last of month [comps setMonth:[comps month]+1]; [comps setDay:0]; [comps setHour:23]; [comps setMinute:59]; [comps setSecond:59]; NSDate *endDate = [calendar dateFromComponents:comps]; [self showStatsForStartDate:startDate endDate:endDate]; } - (IBAction)statsLast30days:(id)sender { NSDate *curDate = [NSDate date]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // End of today [comps setHour:23]; [comps setMinute:59]; [comps setSecond:59]; NSDate *endDate = [calendar dateFromComponents:comps]; // today - 30 days NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; [offsetComponents setDay:-30]; NSDate *startDate = [calendar dateByAddingComponents:offsetComponents toDate:curDate options:0]; comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:startDate]; [comps setHour:0]; [comps setMinute:0]; [comps setSecond:0]; NSDate *newStartDate = [calendar dateFromComponents:comps]; [self showStatsForStartDate:newStartDate endDate:endDate]; } - (IBAction)statsLast60days:(id)sender { NSDate *curDate = [NSDate date]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // End of today [comps setHour:23]; [comps setMinute:59]; [comps setSecond:59]; NSDate *endDate = [calendar dateFromComponents:comps]; // today - 60 days NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; [offsetComponents setDay:-60]; NSDate *startDate = [calendar dateByAddingComponents:offsetComponents toDate:curDate options:0]; comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:startDate]; [comps setHour:0]; [comps setMinute:0]; [comps setSecond:0]; NSDate *newStartDate = [calendar dateFromComponents:comps]; [self showStatsForStartDate:newStartDate endDate:endDate]; } - (IBAction)statsCurrentYear:(id)sender { NSDate *curDate = [NSDate date]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // January 1st [comps setDay:1]; [comps setMonth:1]; [comps setHour:0]; [comps setMinute:0]; [comps setSecond:0]; NSDate *startDate = [calendar dateFromComponents:comps]; // Last of month [comps setMonth:12]; [comps setDay:31]; [comps setHour:23]; [comps setMinute:59]; [comps setSecond:59]; NSDate *endDate = [calendar dateFromComponents:comps]; [self showStatsForStartDate:startDate endDate:endDate]; } - (IBAction)statsStartdateEnddate:(id)sender { [self dismissKeyboard]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:self.startDatePicker.date]; [comps setHour:0]; [comps setMinute:0]; [comps setSecond:0]; NSDate *startDate = [calendar dateFromComponents:comps]; comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:self.endDatePicker.date]; [comps setHour:23]; [comps setMinute:59]; [comps setSecond:59]; NSDate *endDate = [calendar dateFromComponents:comps]; [self showStatsForStartDate:startDate endDate:endDate]; } - (void)showStatsForStartDate:(NSDate *)startDate endDate:(NSDate *)endDate { self.currentStartDate = startDate; self.currentEndDate = endDate; [self performSegueWithIdentifier:@"ShowStatisticsSegue" sender:self]; } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"ShowStatisticsSegue"]) { StatsTabBarController *destController = (StatsTabBarController *)segue.destinationViewController; destController.startDate = self.currentStartDate; destController.endDate = self.currentEndDate; } } @end