Commit dd4b7448 authored by Sandy's avatar Sandy

bug fix

parent cd2eb4ae
......@@ -34,7 +34,6 @@
8F791BF61E4B0E89005FCB92 /* AccountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F791BF41E4B0E89005FCB92 /* AccountViewController.m */; };
8F8105651E10ECC3009A2AB3 /* UIView+Category.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F8105641E10ECC3009A2AB3 /* UIView+Category.m */; };
8F8105681E10F58A009A2AB3 /* OrderListFilterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F8105671E10F58A009A2AB3 /* OrderListFilterViewController.m */; };
8F81056E1E110174009A2AB3 /* DateTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F81056D1E110174009A2AB3 /* DateTextField.m */; };
8F8105711E1101E4009A2AB3 /* NSDate+FormatterAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F81056F1E1101E4009A2AB3 /* NSDate+FormatterAdditions.m */; };
8F8105741E1117D2009A2AB3 /* ModifyPswTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F8105731E1117D2009A2AB3 /* ModifyPswTableViewController.m */; };
8F97C2BD1E0CC4BE00D8A57D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F97C2BC1E0CC4BE00D8A57D /* main.m */; };
......@@ -54,6 +53,8 @@
8F97C32B1E0CF15C00D8A57D /* WWSideslipViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F97C32A1E0CF15C00D8A57D /* WWSideslipViewController.m */; };
8F97C32D1E0CF15C00D8A57D /* WWSideslipViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F97C32A1E0CF15C00D8A57D /* WWSideslipViewController.m */; };
8FA789451E0D0A7D005EF4F0 /* MBProgressHUD+Addtions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA789441E0D0A7D005EF4F0 /* MBProgressHUD+Addtions.m */; };
8FA7A3521E70F1B600EC5AF2 /* DateTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA7A3511E70F1B600EC5AF2 /* DateTextField.m */; };
8FA7A3531E70F1B600EC5AF2 /* DateTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA7A3511E70F1B600EC5AF2 /* DateTextField.m */; };
8FB173D81E4C105E007DF9B8 /* AccountRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB173D71E4C105E007DF9B8 /* AccountRecordViewController.m */; };
8FB173D91E4C105E007DF9B8 /* AccountRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB173D71E4C105E007DF9B8 /* AccountRecordViewController.m */; };
8FC2BD911E125F0500A879C1 /* ScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FC2BD901E125F0500A879C1 /* ScanViewController.m */; };
......@@ -86,7 +87,6 @@
8FFE3DDF1E14AC6700BEB6A6 /* CardView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FC2BDC51E13847800A879C1 /* CardView.m */; };
8FFE3DE01E14AC6700BEB6A6 /* LBXScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FC2BDAD1E12840300A879C1 /* LBXScanViewController.m */; };
8FFE3DE11E14AC6700BEB6A6 /* CardViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FC2BDC81E13884000A879C1 /* CardViewController.m */; };
8FFE3DE21E14AC6700BEB6A6 /* DateTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F81056D1E110174009A2AB3 /* DateTextField.m */; };
8FFE3DE31E14AC6700BEB6A6 /* BaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F42BFFF1E0D255200A54D40 /* BaseViewController.m */; };
8FFE3DE41E14AC6700BEB6A6 /* LBXScanNetAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FC2BDA51E12840300A879C1 /* LBXScanNetAnimation.m */; };
8FFE3DE51E14AC6700BEB6A6 /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F97C2F41E0CCD8200D8A57D /* LoginViewController.m */; };
......@@ -194,8 +194,6 @@
8F8105641E10ECC3009A2AB3 /* UIView+Category.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Category.m"; sourceTree = "<group>"; };
8F8105661E10F58A009A2AB3 /* OrderListFilterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OrderListFilterViewController.h; sourceTree = "<group>"; };
8F8105671E10F58A009A2AB3 /* OrderListFilterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OrderListFilterViewController.m; sourceTree = "<group>"; };
8F81056C1E110174009A2AB3 /* DateTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateTextField.h; sourceTree = "<group>"; };
8F81056D1E110174009A2AB3 /* DateTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DateTextField.m; sourceTree = "<group>"; };
8F81056F1E1101E4009A2AB3 /* NSDate+FormatterAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+FormatterAdditions.m"; sourceTree = "<group>"; };
8F8105701E1101E4009A2AB3 /* NSDate+FormatterAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+FormatterAdditions.h"; sourceTree = "<group>"; };
8F8105721E1117D2009A2AB3 /* ModifyPswTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModifyPswTableViewController.h; sourceTree = "<group>"; };
......@@ -229,6 +227,8 @@
8FA789431E0D0A7D005EF4F0 /* MBProgressHUD+Addtions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD+Addtions.h"; sourceTree = "<group>"; };
8FA789441E0D0A7D005EF4F0 /* MBProgressHUD+Addtions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD+Addtions.m"; sourceTree = "<group>"; };
8FA789461E0D0EDA005EF4F0 /* URL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = URL.h; sourceTree = "<group>"; };
8FA7A3501E70F1B600EC5AF2 /* DateTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateTextField.h; sourceTree = "<group>"; };
8FA7A3511E70F1B600EC5AF2 /* DateTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DateTextField.m; sourceTree = "<group>"; };
8FB173D61E4C105E007DF9B8 /* AccountRecordViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountRecordViewController.h; sourceTree = "<group>"; };
8FB173D71E4C105E007DF9B8 /* AccountRecordViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccountRecordViewController.m; sourceTree = "<group>"; };
8FC2BD8F1E125F0500A879C1 /* ScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScanViewController.h; sourceTree = "<group>"; };
......@@ -354,12 +354,12 @@
children = (
8F6C5C501E4DA965008F98FF /* BaseStateModel.h */,
8F6C5C511E4DA965008F98FF /* BaseStateModel.m */,
8F81056C1E110174009A2AB3 /* DateTextField.h */,
8F81056D1E110174009A2AB3 /* DateTextField.m */,
8F42BFFE1E0D255200A54D40 /* BaseViewController.h */,
8F42BFFF1E0D255200A54D40 /* BaseViewController.m */,
8F42C0011E0D263200A54D40 /* BaseListViewController.h */,
8F42C0021E0D263200A54D40 /* BaseListViewController.m */,
8FA7A3501E70F1B600EC5AF2 /* DateTextField.h */,
8FA7A3511E70F1B600EC5AF2 /* DateTextField.m */,
8F6C5C441E4D9C3D008F98FF /* ZJBaseModel.h */,
8F6C5C451E4D9C3D008F98FF /* ZJBaseModel.m */,
);
......@@ -1003,9 +1003,9 @@
8FC2BD911E125F0500A879C1 /* ScanViewController.m in Sources */,
8FC2BDC61E13847800A879C1 /* CardView.m in Sources */,
8FC2BDBD1E12840300A879C1 /* LBXScanViewController.m in Sources */,
8FA7A3521E70F1B600EC5AF2 /* DateTextField.m in Sources */,
8FCE61651E24C158004B536C /* WatchLoginViewController.m in Sources */,
8FC2BDC91E13884000A879C1 /* CardViewController.m in Sources */,
8F81056E1E110174009A2AB3 /* DateTextField.m in Sources */,
8F42C0001E0D255200A54D40 /* BaseViewController.m in Sources */,
8FC2BDB91E12840300A879C1 /* LBXScanNetAnimation.m in Sources */,
8F97C2F51E0CCD8200D8A57D /* LoginViewController.m in Sources */,
......@@ -1083,9 +1083,9 @@
8FFE3DDE1E14AC6700BEB6A6 /* ScanViewController.m in Sources */,
8FFE3DDF1E14AC6700BEB6A6 /* CardView.m in Sources */,
8FFE3DE01E14AC6700BEB6A6 /* LBXScanViewController.m in Sources */,
8FA7A3531E70F1B600EC5AF2 /* DateTextField.m in Sources */,
8FCE61661E24C158004B536C /* WatchLoginViewController.m in Sources */,
8FFE3DE11E14AC6700BEB6A6 /* CardViewController.m in Sources */,
8FFE3DE21E14AC6700BEB6A6 /* DateTextField.m in Sources */,
8FFE3DE31E14AC6700BEB6A6 /* BaseViewController.m in Sources */,
8FFE3DE41E14AC6700BEB6A6 /* LBXScanNetAnimation.m in Sources */,
8FFE3DE51E14AC6700BEB6A6 /* LoginViewController.m in Sources */,
......
{
"images" : [
{
"idiom" : "universal",
"filename" : "radious_select.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "radious_select@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "radious_select@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
\ No newline at end of file
......@@ -948,7 +948,7 @@
<constraints>
<constraint firstAttribute="width" constant="120" id="EA1-qT-XUN"/>
</constraints>
<state key="normal" title="开始对账">
<state key="normal" title="对账">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="selected" title="完成对账"/>
......
......@@ -16,5 +16,14 @@
@property (weak, nonatomic) IBOutlet UILabel *labelPrice;
@property (weak, nonatomic) IBOutlet UIButton *btnIsChecked;
/**
cell刷新
@param array 数据
@param indexPath 位置
@param isShow 是否显示checkbox
@param isAll 是否全选
*/
- (void)configCellArray:(NSMutableArray *)array indexPath:(NSIndexPath *)indexPath isShow:(BOOL)isShow isAll:(BOOL)isAll;
@end
......@@ -17,7 +17,7 @@
- (void)awakeFromNib {
[super awakeFromNib];
[self.btnIsChecked setBackgroundImage:[UIImage imageNamed:@"radious_select"] forState:UIControlStateDisabled | UIControlStateSelected];
[self.btnIsChecked setBackgroundImage:[UIImage imageNamed:@"radious_select_gray"] forState:UIControlStateDisabled | UIControlStateSelected];
// Initialization code
}
......
......@@ -18,7 +18,7 @@
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *constraintTop;
@property (weak, nonatomic) IBOutlet UIButton *btnSelectAll;
@property (weak, nonatomic) IBOutlet UIButton *btnCheck;
@property (strong, nonatomic) NSMutableArray *arrBillIdToCheck;
@property (strong, nonatomic) NSMutableSet *setBillToCheck;
@property (weak, nonatomic) IBOutlet UILabel *labelCount;
@property (weak, nonatomic) IBOutlet UILabel *labelAmount;
@property (strong, nonatomic) TradeStatisticsResult *total;
......@@ -88,17 +88,16 @@
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[super tableView:tableView didSelectRowAtIndexPath:indexPath];
kDebugIndex(indexPath);
}
- (void)listDidSelect:(id)model {
if (self.btnCheck.isSelected) {
return;
}
// if (self.btnCheck.isSelected) {
// return;
// }
OrderDetailViewController *detailVC = [OrderDetailViewController viewControllerWithStoryBoardType:STORYBOARD_TYPE_MAIN];
detailVC.model = model;
[self.navigationController pushViewController:detailVC animated:YES];
......@@ -123,7 +122,7 @@
}
}
- (IBAction)actionCheck:(UIButton *)sender {
if (!sender.isSelected) {
sender.selected = YES;
[self.tableView reloadData];
......@@ -132,19 +131,16 @@
animations:^{
[self.view layoutIfNeeded];
}];
}else{
if (self.arrBillIdToCheck.count == 0) {
} else {
if (self.setBillToCheck.count == 0) {
[MBProgressHUD j_error:@"请选择对账的单据!" complete:nil];
return;
}
[self httpCheckBill];
}
}
/**
全选操作
......@@ -161,11 +157,10 @@
- (void)setTotal:(TradeStatisticsResult *)total {
_total = total;
self.labelCount.text = [NSString stringWithFormat:@"%lld",total.orderCount];
self.labelCount.text = [NSString stringWithFormat:@"%lld", total.orderCount];
self.labelAmount.text = [NSString stringWithFormat:@"¥ %.2f", total.totalAmount ? total.totalAmount : 0];
}
- (IBAction)actionSelectAll:(UIButton *)sender {
sender.selected = !sender.isSelected;
[self configSelectData:sender.isSelected];
......@@ -182,18 +177,22 @@
}
- (void)actionNoti:(NSNotification *)noti {
NSLog(@"%@",noti);
NSLog(@"%@", noti);
OrderListModel *model = noti.object;
if (model.isSelected) {
[self.arrBillIdToCheck addObject:model.fid];
}else{
[self.arrBillIdToCheck removeObject:model.fid];
[self.setBillToCheck addObject:model];
} else {
[self.setBillToCheck removeObject:model];
}
self.btnSelectAll.selected = [self configIsAll];
}
/**
判断是否全选
*/
- (BOOL)configIsAll {
for (OrderListModel *model in self.arrData) {
if (![model.checkState isEqualToString:@"checked"]) {
......@@ -216,17 +215,27 @@
- (void)httpCheckBill {
CheckOrderRequest *request = [[CheckOrderRequest alloc] init];
request.userId = kUser.fid;
request.orderIds = self.arrBillIdToCheck;
NSMutableArray *arr = [NSMutableArray array];
for (OrderListModel *model in self.setBillToCheck.allObjects) {
[arr addObject:model.fid];
}
request.orderIds = arr;
WS(weakSelf);
[kHttp POST:kUrlCheck parameters:request.toDictionary complete:^(id _Nullable response, NSError * _Nullable error) {
if (kRsSuccess(response)) {
[MBProgressHUD j_success:@"对账成功!" complete:nil];
[weakSelf actionCancelCheck:nil];
[weakSelf.arrBillIdToCheck removeAllObjects];
} else {
kShowRsMsg(response);
}
}];
[kHttp POST:kUrlCheck
parameters:request.toDictionary
complete:^(id _Nullable response, NSError *_Nullable error) {
if (kRsSuccess(response)) {
[MBProgressHUD j_success:@"对账成功!" complete:nil];
for (OrderListModel *model in weakSelf.setBillToCheck.allObjects) {
model.checkState = @"checked";
}
[weakSelf.setBillToCheck removeAllObjects];
[weakSelf.tableView reloadData];
} else {
kShowRsMsg(response);
}
}];
}
#pragma mark - lazy
......@@ -257,13 +266,20 @@
}
return _param;
}
//
//- (NSMutableArray *)arrBillIdToCheck {
// if (!_arrBillIdToCheck) {
// _arrBillIdToCheck = [NSMutableArray array];
// }
//
// return _arrBillIdToCheck;
//}
- (NSMutableArray *)arrBillIdToCheck {
if (!_arrBillIdToCheck) {
_arrBillIdToCheck = [NSMutableArray array];
- (NSMutableSet *)setBillToCheck {
if (!_setBillToCheck) {
_setBillToCheck = [NSMutableSet set];
}
return _arrBillIdToCheck;
return _setBillToCheck;
}
- (UIView *)shadow {
......
......@@ -45,8 +45,9 @@
[super viewDidLoad];
self.view.backgroundColor = [UIColor clearColor];
// Do any additional setup after loading the view.
self.textFieldDate.type = DateTextFieldYearMonthDay;
self.textFieldEndDate.type = DateTextFieldYearMonthDay;
self.textFieldDate.type = DateTextFieldTime;
self.textFieldEndDate.type = DateTextFieldTime;
self.textFieldDate.text = [[[NSDate date] yearMonthDayString] stringByAppendingString:@" 00:00:00"];
}
- (IBAction)actionBac:(id)sender {
......@@ -56,8 +57,8 @@
- (void)configParam {
self.param.billNumberLike = self.textFieldBillNumber.text;
self.param.userNameLike = self.textFieldStationUser.text;
self.param.beginDate = kIf(self.textFieldDate.text.length > 0, [self.textFieldDate.text stringByAppendingString:@" 00:00:00"], nil);
self.param.endDate = kIf(self.textFieldEndDate.text.length > 0, [self.textFieldEndDate.text stringByAppendingString:@" 23:59:59"], nil);
self.param.beginDate = self.textFieldDate.text;
self.param.endDate = self.textFieldEndDate.text;;
}
#pragma mark - actions
......
......@@ -133,6 +133,10 @@
if (self.arrData.count < self.pageSize * self.page) {
[self.tableView.mj_footer endRefreshingWithNoMoreData];
}
if (self.page == 0) {
[self.tableView.mj_footer resetNoMoreData];
}
}
- (void)listTableViewReloadDataWithNewRecord:(NSArray *)newRecord
......
......@@ -14,7 +14,7 @@ typedef NS_ENUM(NSInteger, DateTextFieldType) {
/**
* 年月
*/
DateTextFieldYearMonth = 0,
DateTextFieldYearMonth,
/**
* 年月日
*/
......@@ -25,7 +25,30 @@ typedef NS_ENUM(NSInteger, DateTextFieldType) {
DateTextFieldTime,
};
/**
时间范围
- DateTextFieldRangeBefore: 现在之前
- DateTextFieldRangeAfter: 现在之后
*/
typedef NS_ENUM(NSInteger, DateTextFieldRange) {
DateTextFieldRangeUnLimited,
DateTextFieldRangeBefore,
DateTextFieldRangeAfter
};
@interface DateTextField : UITextField
@property (nonatomic, assign) DateTextFieldType type;
@property (nonatomic, assign) DateTextFieldRange rangeType;
@property (nonatomic, copy) void (^blockEndEdit)(void);
@property (strong, nonatomic) NSDate *maxDate;
@property (strong, nonatomic) NSDate *minDate;
/**
datePicker的日期
*/
@property (strong, nonatomic) NSDate *date;
@end
......@@ -9,25 +9,28 @@
#import "DateTextField.h"
@interface DateTextField () <UITextFieldDelegate>
@property (strong, nonatomic) UIDatePicker *datePicker;
@end
@implementation DateTextField
- (void)awakeFromNib
{
[super awakeFromNib];
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, kWidth, 216)];
self.inputView = datePicker;
NSDate *date = [NSDate date];
self.delegate = self;
datePicker.date = date;
datePicker.maximumDate = date;
[datePicker addTarget:self action:@selector(actionPickerDidChanged:) forControlEvents:UIControlEventValueChanged];
self.delegate = self;
//如果没有设置时间范围,则默认可选取的最大时间是当前时间
if (!self.maxDate && !self.minDate) {
self.datePicker.maximumDate = [NSDate date];
}else{
self.datePicker.maximumDate = self.maxDate;
self.datePicker.minimumDate = self.minDate;
}
[self.datePicker addTarget:self action:@selector(actionPickerDidChanged:) forControlEvents:UIControlEventValueChanged];
}
- (void)setType:(DateTextFieldType)type {
_type = type;
UIDatePicker *datePicker = (UIDatePicker *)self.inputView;
UIDatePicker *datePicker = self.datePicker;
NSDate *date = datePicker.date;
switch (self.type) {
case DateTextFieldYearMonth: {
......@@ -41,31 +44,27 @@
break;
}
case DateTextFieldTime: {
datePicker.datePickerMode = UIDatePickerModeTime;
datePicker.datePickerMode = UIDatePickerModeDateAndTime;
self.text = [date httpParameterString];
break;
}
}
}
- (void)textFieldDidBeginEditing:(UITextField *)textField {
if (self.rangeType == DateTextFieldRangeAfter) {
self.datePicker.minimumDate = [NSDate date];
self.datePicker.maximumDate = nil;
}else if (self.rangeType == DateTextFieldRangeBefore){
self.datePicker.minimumDate = nil;
self.datePicker.maximumDate = [NSDate date];
}
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
UIDatePicker *datePicker = (UIDatePicker *)textField.inputView;
NSDate *date = datePicker.date;
switch (self.type) {
case DateTextFieldYearMonth: {
textField.text = [date yearMonthString];
break;
}
case DateTextFieldYearMonthDay: {
textField.text = [date yearMonthDayString];
break;
}
case DateTextFieldTime: {
textField.text = [date httpParameterString];
break;
}
}
if (self.blockEndEdit) {
self.blockEndEdit();
}
......@@ -100,4 +99,29 @@
return NO;
return [super canPerformAction:action withSender:sender];
}
- (void)setMaxDate:(NSDate *)maxDate {
_maxDate = maxDate;
self.datePicker.maximumDate = maxDate;
}
- (void)setMinDate:(NSDate *)minDate {
_minDate = minDate;
self.datePicker.minimumDate = minDate;
}
- (NSDate *)date {
return self.datePicker.date;
}
- (UIDatePicker *)datePicker {
if (!_datePicker) {
_datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, kWidth, 216)];
self.inputView = _datePicker;
NSDate *date = [NSDate date];
_datePicker.date = date;
}
return _datePicker;
}
@end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment