use crate::{
commands::{
Cli, Result,
edit::{
edit_address::edit_address, edit_bank::edit_bank, edit_scheme::edit_scheme, map_empty,
},
},
entities::Company,
jobber::JobberEdit,
print_tip,
views::CompanyView,
};
use clap::Parser;
use color_print::cprintln;
use inquire::{Confirm, Text};
#[derive(Parser, Debug)]
pub(crate) struct EditCompany {}
impl EditCompany {
pub(crate) fn run(&self, cli: &Cli) -> Result<()> {
let mut database = cli.open_database()?;
loop {
if !database.edit_company(edit_company)? {
cprintln!("Nothing changed.");
return Ok(());
}
println!();
println!("{}", CompanyView::new(&database, cli.ansi())?);
match Confirm::new("Is this information correct?")
.with_default(true)
.with_help_message("cancel change with ESC")
.prompt_skippable()?
{
Some(true) => {
cprintln!("Successfully edited company.");
print_tip!(cli);
print_tip!(
cli,
"Use <s>jobber show company</> to see the company data."
);
print_tip!(cli, "Use <s>jobber undo</> to undo the change.");
cli.close_database(database)?;
return Ok(());
}
Some(false) => (),
None => {
cprintln!("Database remained unchanged.");
return Ok(());
}
}
}
}
}
pub(crate) fn edit_company(company: &mut Company) -> crate::database::Result<bool> {
let orig = company.clone();
edit_address(&mut company.address)?;
edit_bank(&mut company.bank)?;
company.vat = map_empty(
Text::new("Tax No. (VAT)?")
.with_default(&orig.vat.clone().unwrap_or_default())
.with_help_message("enter '-' to remove")
.prompt()?,
);
println!();
println!("Add optional contact information...");
println!();
company.email = map_empty(
Text::new("Email Address?")
.with_default(&orig.email.clone().unwrap_or("-".to_string()))
.with_help_message("enter '-' to remove")
.prompt()?,
);
company.phone = map_empty(
Text::new("Phone No.?")
.with_default(&orig.phone.clone().unwrap_or("-".to_string()))
.with_help_message("enter '-' to remove")
.prompt()?,
);
company.register = map_empty(
Text::new("Company Registration?")
.with_default(&orig.register.clone().unwrap_or("-".to_string()))
.with_help_message("enter '-' to remove")
.prompt()?,
);
edit_scheme(&mut company.scheme)?;
Ok(orig != *company)
}