form pro - sin imagenes

This commit is contained in:
Felipe
2024-03-14 22:07:46 -05:00
parent 66125235dd
commit a3c50cf2c8
123 changed files with 2077 additions and 18345 deletions
@@ -0,0 +1,4 @@
export '/src/entities/payment_method_entity.dart';
export '/src/entities/professional_entity.dart';
export '/src/entities/schedule_entity.dart';
export '/src/entities/schedules.dart';
@@ -0,0 +1,51 @@
import 'package:equatable/equatable.dart';
class PaymentMethodEntity extends Equatable {
final bool nequi;
final bool datafono;
final bool transferencia;
static const empty = PaymentMethodEntity(
nequi: false,
datafono: false,
transferencia: false,
);
const PaymentMethodEntity({
required this.nequi,
required this.datafono,
required this.transferencia,
});
static PaymentMethodEntity fromDocument(Map<String, dynamic> doc) {
return PaymentMethodEntity(
nequi: doc['nequi'] as bool,
datafono: doc['datafono'] as bool,
transferencia: doc['transferencia'] as bool,
);
}
Map<String, dynamic> toJson() {
return {
'nequi': nequi,
'datafono': datafono,
'transferencia': transferencia,
};
}
@override
List<Object?> get props => [
nequi,
datafono,
transferencia,
];
@override
String toString() {
return '''SettingEntity {
nequi: $nequi
datafono: $datafono
transferencia: $transferencia
}''';
}
}
@@ -0,0 +1,113 @@
import 'package:equatable/equatable.dart';
import 'package:professional_repository/professional_repository.dart';
class ProfessionalEntity extends Equatable {
final String id;
final String identification;
final String address;
final String profession;
final String rate;
final String location;
final String identificationPicture;
final String certificatePicture;
final String latitude;
final String longitude;
final List<String> specializations;
final List<String> specializationsPictures;
final Schedules schedules;
final PaymentMethodEntity paymentMethods;
const ProfessionalEntity({
required this.id,
required this.identification,
required this.address,
required this.profession,
required this.rate,
required this.location,
required this.identificationPicture,
required this.certificatePicture,
required this.latitude,
required this.longitude,
required this.specializations,
required this.specializationsPictures,
required this.schedules,
required this.paymentMethods,
});
static ProfessionalEntity fromDocument(Map<String, dynamic> doc) {
return ProfessionalEntity(
id: doc['id'] as String,
identification: doc['identification'] as String,
address: doc['address'] as String,
profession: doc['profession'] as String,
rate: doc['rate'] as String,
location: doc['location'] as String,
identificationPicture: doc['identification_picture'] as String,
certificatePicture: doc['certificate_picture'] as String,
latitude: doc['latitude'] as String,
longitude: doc['longitude'] as String,
specializations: List<String>.from(doc['specializations']),
specializationsPictures:
List<String>.from(doc['specializations_pictures']),
schedules: Schedules.fromDocument(doc['schedules']),
paymentMethods: PaymentMethodEntity.fromDocument(doc['payment_methods']),
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'identification': identification,
'address': address,
'profession': profession,
'rate': rate,
'location': location,
'identification_picture': identificationPicture,
'certificate_picture': certificatePicture,
'latitude': latitude,
'longitude': longitude,
'specializations': specializations,
'specializations_pictures': specializationsPictures,
'schedules': schedules.toJson(),
'payment_methods': paymentMethods.toJson(),
};
}
@override
List<Object?> get props => [
id,
identification,
address,
profession,
rate,
location,
identificationPicture,
certificatePicture,
latitude,
longitude,
specializations,
specializationsPictures,
schedules,
paymentMethods
];
@override
String toString() {
return '''ProfessionalEntity{ {
id: $id,
identification: $identification,
address: $address,
profession: $profession,
rate: $rate,
location: $location,
identificationPicture: $identificationPicture,
certificatePicture: $certificatePicture,
latitude: $latitude,
longitude: $longitude,
specializations: $specializations,
specializationsPictures: $specializationsPictures,
schedule: $schedules,
paymentMethods: $paymentMethods
}''';
}
}
@@ -0,0 +1,99 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
class ScheduleEntity extends Equatable {
final bool enabled;
final bool continuousDay;
final TimeOfDay? range1Hour1;
final TimeOfDay? range1Hour2;
final TimeOfDay? range2Hour1;
final TimeOfDay? range2Hour2;
const ScheduleEntity({
required this.enabled,
required this.continuousDay,
required this.range1Hour1,
required this.range1Hour2,
required this.range2Hour1,
required this.range2Hour2,
});
static const empty = ScheduleEntity(
enabled: false,
continuousDay: false,
range1Hour1: null,
range1Hour2: null,
range2Hour1: null,
range2Hour2: null,
);
static ScheduleEntity fromDocument(Map<String, dynamic> doc) {
return ScheduleEntity(
enabled: doc['habilitado'] as bool,
continuousDay: doc['continuous_day'] as bool,
range1Hour1: _parseTime(doc['range1Hour1']),
range1Hour2: _parseTime(doc['range1Hour2']),
range2Hour1: _parseTime(doc['range2Hour1']),
range2Hour2: _parseTime(doc['range2Hour2']),
);
}
static TimeOfDay? _parseTime(String? time) {
if (time == null) return null;
final components = time.split(' ');
final hourMinutes = components[0].split(':');
final hour = int.parse(hourMinutes[0]);
final minutes = int.parse(hourMinutes[1]);
if (components[1] == 'PM' && hour < 12) {
return TimeOfDay(hour: hour + 12, minute: minutes);
} else if (components[1] == 'AM' && hour == 12) {
return TimeOfDay(hour: 0, minute: minutes);
}
return TimeOfDay(hour: hour, minute: minutes);
}
Map<String, dynamic> toJson() {
return {
'habilitado': enabled,
'continuous_day': continuousDay,
'range1Hour1': formatTimeOfDay(range1Hour1),
'range1Hour2': formatTimeOfDay(range1Hour2),
'range2Hour1': formatTimeOfDay(range2Hour1),
'range2Hour2': formatTimeOfDay(range2Hour2),
};
}
String? formatTimeOfDay(TimeOfDay? time) {
if (time != null) {
final now = DateTime.now();
final dateTime =
DateTime(now.year, now.month, now.day, time.hour, time.minute);
final format = DateFormat.jm();
return format.format(dateTime);
}
return null;
}
@override
List<Object?> get props => [
enabled,
continuousDay,
range1Hour1,
range1Hour2,
range2Hour1,
range2Hour2,
];
@override
String toString() {
return '''ScheduleEntity {
enabled: $enabled,
continuousDay: $continuousDay,
range1Hour1: $range1Hour1,
range1Hour2: $range1Hour2,
range2Hour1: $range2Hour1,
range2Hour2: $range2Hour2
}''';
}
}
@@ -0,0 +1,59 @@
import 'package:equatable/equatable.dart';
import 'package:professional_repository/src/entities/schedule_entity.dart';
class Schedules extends Equatable {
final ScheduleEntity monday;
final ScheduleEntity tuesday;
final ScheduleEntity wednesday;
final ScheduleEntity thursday;
final ScheduleEntity friday;
final ScheduleEntity saturday;
final ScheduleEntity sunday;
const Schedules(
{required this.monday,
required this.tuesday,
required this.wednesday,
required this.thursday,
required this.friday,
required this.saturday,
required this.sunday});
static const empty = Schedules(
monday: ScheduleEntity.empty,
tuesday: ScheduleEntity.empty,
wednesday: ScheduleEntity.empty,
thursday: ScheduleEntity.empty,
friday: ScheduleEntity.empty,
saturday: ScheduleEntity.empty,
sunday: ScheduleEntity.empty,
);
factory Schedules.fromDocument(Map<String, dynamic> doc) {
return Schedules(
monday: ScheduleEntity.fromDocument(doc['monday']),
tuesday: ScheduleEntity.fromDocument(doc['tuesday']),
wednesday: ScheduleEntity.fromDocument(doc['wednesday']),
thursday: ScheduleEntity.fromDocument(doc['thursday']),
friday: ScheduleEntity.fromDocument(doc['friday']),
saturday: ScheduleEntity.fromDocument(doc['saturday']),
sunday: ScheduleEntity.fromDocument(doc['sunday']),
);
}
Map<String, dynamic> toJson() {
return {
'monday': monday.toJson(),
'tuesday': tuesday.toJson(),
'wednesday': wednesday.toJson(),
'thursday': thursday.toJson(),
'friday': friday.toJson(),
'saturday': saturday.toJson(),
'sunday': sunday.toJson(),
};
}
@override
List<Object?> get props =>
[monday, tuesday, wednesday, thursday, friday, saturday, sunday];
}
@@ -0,0 +1,31 @@
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:professional_repository/professional_repository.dart';
class FirebaseProfessionalRepository {
bool isProModeActive = false;
final professionalCollection =
FirebaseFirestore.instance.collection('professional_info');
final StreamController<bool> _userStreamController =
StreamController.broadcast();
FirebaseProfessionalRepository() {
_userStreamController.add(isProModeActive);
}
Stream<bool> sreamIsProModeActive() {
return _userStreamController.stream;
}
switchProMode() async {
isProModeActive = !isProModeActive;
_userStreamController.add(isProModeActive);
}
Future<void> saveProfessionalInfo(ProfessionalEntity entity) async {
await professionalCollection.doc(entity.id).set(entity.toJson());
}
}